import { Parser, SubParsers } from '../parser'; export function then

(success: P, failure: P): P; export function then(success: Parser, failure: Parser): Parser { assert(success); assert(failure); return (input, output) => output.state ? success(input, output) : failure(input, output); } export function success

(parser: P): P; export function success(parser: Parser): Parser { assert(parser); return (input, output) => output.context && parser(input, output); } export function failure

(parser: P): P; export function failure(parser: Parser): Parser { assert(parser); return (input, output) => output.context ?? parser(input, output); } export function always

(parsers: readonly P[]): P; export function always>(parsers: S): Parser { return () => parsers; } export function force

(parser: P): P; export function force(parser: Parser): Parser { return (input, output) => input.position === input.source.length ? output.context : parser(input, output); }