public static Parser <TToken, IDelayed <ISeq <T> > > ManyTill <TToken, T>( this Parser <TToken, T> parser, Parser <TToken, Unit> terminator) { return(terminator.Select(_ => Seq.Empty <T>()) .Or(parser.SelectMany(head => InternalCombinator.ManyTill(parser, terminator) .Select(tail => Seq.Cons(head, tail))))); }