anchor.diff:   */
   Parser stringIgnoreCase(String element, [String message]) {
     final lowerElement = element.toLowerCase();
  -  return new PredicateParser(element.length,
  +  return new _PredicateParser(element.length,
       (String each) => lowerElement == each.toLowerCase(),
       message != null ? message : '$element expected');
   }
  
positive.code:  * Returns a parser that accepts any input element.
   */
  Parser any([String message]) {
    return new _AnyPredicateParser(message != null ? message : 'input expected');
  }
  
  class _AnyPredicateParser extends Parser {
    final String _message;
    _AnyPredicateParser(this._message);
    Result _parse(Context context) {
      final buffer = context.buffer;
      final position = context.position;
      if (position < buffer.length) {
        return context.success(buffer[position], position + 1);
      } else {
        return context.failure(_message);
      }
    }
  }
  
  /**
   * Returns a parser that accepts any of the [elements].
   */
  Parser anyIn(dynamic elements, [String message]) {
    return new PredicateParser(1,
      (each) => elements.indexOf(each) >= 0,
      message != null ? message : 'any of $elements expected');
  }
  
negative.code:  * Returns a parser that accepts the string [element].
   */
  Parser string(String element, [String message]) {
    return new _PredicateParser(element.length,
      (String each) => element == each,
      message != null ? message : '$element expected');
  }
  