anchor.diff:  
     /// Adds a prefix operator [parser]. Evaluates the optional [action] with the
     /// parsed `operator` and `value`.
  -  void prefix(Parser parser, [Function action]) {
  +  void prefix<T>(Parser<T> parser, [Object action(T operator, Object value)]) {
       action ??= (operator, value) => [operator, value];
       _prefix.add(parser.map((operator) => ExpressionResult(operator, action)));
     }
  
positive.code:       return inner.separatedBy(_buildChoice(_right)).map((sequence) {
          var result = sequence.last;
          for (var i = sequence.length - 2; i > 0; i -= 2) {
            result =
                sequence[i].action(sequence[i - 1], sequence[i].operator, result);
          }
          return result;
        });
  
negative.code: 
    final List<Parser> _right = [];
  
    /// 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 action(Object left, T operator, Object right)]) {
      action ??= (left, operator, right) => [left, operator, right];
      _left.add(parser.map((operator) => ExpressionResult(operator, action)));
    }
  