public static Parser <TToken, IEnumerable <T> > SepBy0_Optimized <TToken, T>(
     Parser <TToken, T> parser,
     Parser <TToken, Unit> sep)
 {
     return(InternalCombinator.SepBy1_Optimized(parser, sep)
            .Or(Parser.Return <TToken, IEnumerable <T> >(Enumerable.Empty <T>())));
 }
 public static Parser <TToken, IEnumerable <T> > SepEndBy1_Optimized <TToken, T>(
     Parser <TToken, T> parser,
     Parser <TToken, Unit> sep)
 {
     return(InternalCombinator.SepBy1_Optimized(parser, sep)
            .Bindl(sep.Optional()));
 }
        public static Parser <TToken, IEnumerable <T> > SepBy1 <TToken, T>(
            this Parser <TToken, T> parser,
            Parser <TToken, Unit> sep)
        {
            /*
             * return InternalCombinator.SepBy1(parser, sep)
             *     .Select(delayedSeq => delayedSeq.AsEnumerable());
             */

            return(InternalCombinator.SepBy1_Optimized(parser, sep));
        }