code: func (p *Path) BothWithTags(tags []string, via ...interface{}) *Path {
  	np := p.clone()
  	np.stack = append(np.stack, bothMorphism(tags, via...))
  	return np
  }
docs: // BothWithTags is exactly like Both, except it tags the value of the predicate
  // traversed with the tags provided.