Пример #1
0
 public static Program.Parser <C> SelectMany <A, B, C>(
     this Program.Parser <A> parser,
     Func <A, Program.Parser <B> > function,
     Func <A, B, C> projection)
 {
     return(parser.Bind(
                outer => function(outer).Bind(
                    inner => projection(outer, inner).Unit())));
 }
Пример #2
0
        public static Program.Parser <B> Bind <A, B>(
            this Program.Parser <A> p, Func <A, Program.Parser <B> > f)
        {
            return(s =>
            {
                var x = p(s);

                if (!x.Any())
                {
                    return Program.ResultForFailedParse <B>();
                }

                var y = x.First();

                return f(y.Item1)(y.Item2);
            });
        }
Пример #3
0
 public static Program.Parser <B> Select <A, B>(
     this Program.Parser <A> parser, Func <A, B> function)
 {
     return(parser.Bind(a => function(a).Unit()));
 }