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), ])); } }