code: public final Parser<WithSource<T>> withSource() {
      return new Parser<WithSource<T>>() {
        @Override boolean apply(ParseContext ctxt) {
          int begin = ctxt.getIndex();
          if (!Parser.this.apply(ctxt)) {
            return false;
          }
          String source = ctxt.source.subSequence(begin, ctxt.getIndex()).toString();
          @SuppressWarnings("unchecked")
          WithSource<T> withSource = new WithSource<T>((T) ctxt.result, source);
          ctxt.result = withSource;
          return true;
        }
        @Override public String toString() {
          return Parser.this.toString();
        }
      };
    }
docs: A {@link Parser} that returns both parsed object and matched string.