anchor.diff:  
     /// Adds a right-associative operator [parser]. Evaluates the optional
     /// [action] with the parsed `left` term, `operator`, and `right` term.
  -  void right<T>(Parser<T> parser,
  -      [Object Function(Object left, T operator, Object right) action]) {
  +  void right<O, V>(Parser<O> parser,
  +      [Object Function(V left, O operator, V right) action]) {
       action ??= (left, operator, right) => [left, operator, right];
       _right.add(parser.map((operator) => ExpressionResult(operator, action)));
     }
  
positive.code: 
    /// Adds a left-associative operator [parser]. Evaluates the optional [action]
    /// with the parsed `left` term, `operator`, and `right` term.
    void left<T>(Parser<T> parser,
        [Object Function(Object left, T operator, Object right) action]) {
      action ??= (left, operator, right) => [left, operator, right];
      _left.add(parser.map((operator) => ExpressionResult(operator, action)));
    }
  
negative.code: class ExpressionGroup {
    /// Defines a new primitive or literal [parser]. Evaluates the optional
    /// [action].
    void primitive<V>(Parser<V> parser, [Object Function(V value) action]) {
      _primitives.add(action != null ? parser.map(action) : parser);
    }
  
  