code: func hasShapeMorphism(via interface{}, rev bool, nodes shape.Shape) morphism {
  	return morphism{
  		Reversal: func(ctx *pathContext) (morphism, *pathContext) { return hasShapeMorphism(via, rev, nodes), ctx },
  		Apply: func(in shape.Shape, ctx *pathContext) (shape.Shape, *pathContext) {
  			return shape.HasLabels(in, buildVia(via), nodes, ctx.labelSet, rev), ctx
  		},
  	}
  }
docs: // hasShapeMorphism is the set of nodes that is reachable via either a *Path, a
  // single node.(string) or a list of nodes.([]string).