anchor.diff:      final match = head.match(goal);
       if (match != null) {
         final newHead = head.substitute(match);
  -      final Term newBody = body.substitute(match);
  +      final newBody = body.substitute(match);
         await for (final item in newBody.query(database)) {
           yield newHead.substitute(newBody.match(item));
         }
  
positive.code:   }
  
    @override
    Node substitute(Map<Variable, Node> bindings) => this;
  
    @override
    bool operator ==(Object other) => other is Value && name == other.name;
  
negative.code: import 'package:more/iterable.dart';
  
  const argumentEquality = ListEquality();
  
  Map<Variable, Node> newBindings() => Map<Variable, Node>.identity();
  
  Map<Variable, Node> mergeBindings(
    Map<Variable, Node> first,
  