public static Parser <TToken, IEnumerable <T> > SepBy1_Optimized <TToken, T>(
     Parser <TToken, T> parser,
     Parser <TToken, Unit> sep)
 {
     return(parser.Pipe(InternalCombinator.Many0_Optimized(sep.Bindr(parser)),
                        (head, tail) => Enumerable.Concat(new[] { head }, tail)));
 }
        public static Parser <TToken, IEnumerable <T> > Many0 <TToken, T>(
            this Parser <TToken, T> parser)
        {
            /*
             * return InternalCombinator.Many0(parser)
             *       .Select(delayedSeq => delayedSeq.AsEnumerable());
             */

            return(InternalCombinator.Many0_Optimized(parser));
        }
 public static Parser <TToken, IEnumerable <T> > EndBy0_Optimized <TToken, T>(
     Parser <TToken, T> parser,
     Parser <TToken, Unit> sep)
 {
     return(InternalCombinator.Many0_Optimized(parser.Bindl(sep)));
 }
 public static Parser <TToken, IEnumerable <T> > Many1_Optimized <TToken, T>(
     Parser <TToken, T> parser)
 {
     return(parser.Pipe(InternalCombinator.Many0_Optimized(parser),
                        (head, tail) => Enumerable.Concat(new[] { head }, tail)));
 }