code: func isNodeMorphism(nodes ...graph.Value) morphism {
  	return morphism{
  		Reversal: func(ctx *pathContext) (morphism, *pathContext) { return isNodeMorphism(nodes...), ctx },
  		Apply: func(in shape.Shape, ctx *pathContext) (shape.Shape, *pathContext) {
  			if len(nodes) == 0 {
  				// Acting as a passthrough here is equivalent to
  				// building a NodesAllIterator to Next() or Contains()
  				// from here as in previous versions.
  				return in, ctx
  			}
  			// Anything with fixedIterators will usually have a much
  			// smaller result set, so join isNodes first here.
  			return join(shape.Fixed(nodes), in), ctx
  		},
  	}
  }
docs: // isNodeMorphism represents all nodes passed in-- if there are none, this function
  // acts as a passthrough for the previous iterator.