code: public final <R> Parser<R> ifelse(
        final Function<? super T, ? extends Parser<? extends R>> consequence,
        final Parser<? extends R> alternative) {
      return new Parser<R>() {
        @Override boolean apply(ParseContext ctxt) {
          final Object ret = ctxt.result;
          final int step = ctxt.step;
          final int at = ctxt.at;
          if (ctxt.withErrorSuppressed(Parser.this)) {
            Parser<? extends R> parser = consequence.apply(Parser.this.getReturn(ctxt));
            return parser.apply(ctxt);
          }
          ctxt.set(step, at, ret);
          return alternative.apply(ctxt);
        }
        @Override public String toString() {
          return "ifelse";
        }
      };
    }
docs: A {@link Parser} that runs {@code consequence} if {@code this} succeeds, or {@code alternative} otherwise.