import { Parser, SubParsers } from '../parser'; import { union } from './union'; import { inits } from './inits'; export function subsequence

(parsers: Parser.SubParsers

): P; export function subsequence(parsers: SubParsers): Parser { assert(parsers.every(f => f)); return union( parsers.map((_, i) => i + 1 !== parsers.length ? inits([ parsers[i], subsequence(parsers.slice(i + 1)), ]) : parsers[i])); }