anchor.diff:        message != null ? message : '$start..$stop expected');
   }
   
  -class _RangeCharPredicate extends CharacterPredicate {
  -
  -  final int _start;
  -
  -  final int _stop;
  -
  -  const _RangeCharPredicate(this._start, this._stop);
  -
  -  @override
  -  bool test(int value) => _start <= value && value <= _stop;
  +class _RangeCharPredicate implements CharacterPredicate {
  +
  +  final int start;
  +  final int stop;
  +
  +  const _RangeCharPredicate(this.start, this.stop);
  +
  +  @override
  +  bool test(int value) => start <= value && value <= stop;
   
   }
   
  
positive.code:   factory _CharacterRange(start, [stop]) {
      if (stop == null) stop = start;
      return new _CharacterRange._(_toCharCode(start), _toCharCode(stop));
    }
  
    @override
    String toString() {
      return start == stop
          ? new String.fromCharCode(start)
          : new String.fromCharCode(start) + "-" + new String.fromCharCode(stop);
    }
  
  }
  
negative.code:   var positive = multiple.or(single).plus()
        .map((each) => _optimize(each));
    return char('^').optional().seq(positive)
        .map((each) => each[0] == null ? each[1] : new _NotCharacterPredicate(each[1]));
  }
  
  final _patternParser = _createPatternParser();
  