code: func (p *Program) Tags(fn func(t Tag, value string)) {
  	if fn == nil {
  		return
  	}
  	fn(idTag, p.UID())
  	if p.name != "" {
  		fn(programNameTag, p.name)
  	}
  	if p.command != "" {
  		fn(commandLineTag, p.command)
  	}
  	if p.previous != "" {
  		fn(previousProgTag, p.previous)
  	}
  	if p.version != "" {
  		fn(versionTag, p.version)
  	}
  	for _, tp := range p.otherTags {
  		fn(tp.tag, tp.value)
  	}
  }
docs: // Tags applies the function fn to each of the tag-value pairs of the Program.
  // The function fn must not add or delete tags held by the receiver during
  // iteration.