anchor.diff:    }
   
     @override
  -  Node substitute(Map<Variable, Node> bindings) => this;
  +  Value substitute(Map<Variable, Node> bindings) => this;
   
     @override
     bool operator ==(Object other) => other is Value && name == other.name;
  
positive.code:       }
        return zip([arguments, other.arguments])
            .map((arg) => arg[0].match(arg[1]))
            .fold(Map<Variable, Node>.identity(), mergeBindings);
      }
      return other.match(this);
    }
  
    @override
    Node substitute(Map<Variable, Node> bindings) =>
        Term(name, arguments.map((arg) => arg.substitute(bindings)));
  
    @override
  
negative.code: 
    @override
    Map<Variable, Node> match(Node other) {
      final bindings = newBindings();
      if (this != other) {
        bindings[this] = other;
      }
  