import { Parser, SubParsers } from '../parser';
import { success, always } from './state';
export function sequence
(parsers: Parser.SubParsers
): P;
export function sequence(parsers: SubParsers): Parser {
assert(parsers.every(f => f));
switch (parsers.length) {
case 0:
assert(false);
return (_, output) => output.context;
case 1:
return parsers[0];
default:
return parsers.reduceRight((acc, parser) => always([
parser,
success(acc),
]));
}
}