code: func predicatesMorphism(isIn bool) morphism {
  	return morphism{
  		Reversal: func(ctx *pathContext) (morphism, *pathContext) {
  			panic("not implemented: need a function from predicates to their associated edges")
  		},
  		Apply: func(in shape.Shape, ctx *pathContext) (shape.Shape, *pathContext) {
  			return shape.Predicates(in, isIn), ctx
  		},
  	}
  }
docs: // predicatesMorphism iterates to the uniqified set of predicates from
  // the given set of nodes in the path.