Ejemplo n.º 1
0
 public static IDelayed <T2> SelectMany <T0, T1, T2>(
     this IDelayed <T0> value,
     Func <T0, IDelayed <T1> > selector,
     Func <T0, T1, T2> projector)
 {
     return(value.SelectMany(value0 => selector(value0).Select(value1 => projector(value0, value1))));
 }
Ejemplo n.º 2
0
 public static IDelayed <ISeq <T2> > SelectMany <T0, T1, T2>(
     this IDelayed <ISeq <T0> > delayedSeq,
     Func <T0, IDelayed <ISeq <T1> > > selector,
     Func <T0, T1, T2> projector)
 {
     return(delayedSeq.SelectMany(value0 => selector(value0).Select(value1 => projector(value0, value1))));
 }
 public static bool Any <T>(
     this IDelayed <ISeq <T> > delayedSeq)
 {
     return(delayedSeq.Force().Case(
                () => false,
                _ => true));
 }
Ejemplo n.º 4
0
 public static Boolean Any <T>(
     this IDelayed <ISeq <T> > delayedSeq)
 {
     return(delayedSeq.Force().Case(
                empty: () => false,
                headAndTail: _ => true));
 }
 public static T1 Foldl <T0, T1>(this IDelayed <ISeq <T0> > delayedSeq, T1 init, Func <T1, T0, T1> func)
 {
     return(delayedSeq.Force()
            .Case(
                () =>
                init,
                pair => pair.Item1.Foldl(func(init, pair.Item0), func)));
 }
Ejemplo n.º 6
0
 public static IEnumerable <T> AsEnumerable <T>(
     this IDelayed <ISeq <T> > delayedSeq)
 {
     foreach (var item in delayedSeq.Select(seq => seq.AsEnumerable()).Force())
     {
         yield return(item);
     }
 }
Ejemplo n.º 7
0
 public static Parser <TToken, T> Choice <TToken, T>(
     IDelayed <ISeq <Parser <TToken, T> > > parsers)
 {
     return(parsers.Force().Case(
                () =>
                Parser.Fail <TToken, T>("Failure: Combinator.Choice"),
                pair =>
                pair.Item0.Or(Choice(pair.Item1))));
 }
 public static bool Any <T>(
     this IDelayed <ISeq <T> > delayedSeq,
     Func <T, bool> predicate)
 {
     return(delayedSeq.Force().Case(
                () => false,
                pair =>
                predicate(pair.Item0) || pair.Item1.Any(predicate)));
 }
Ejemplo n.º 9
0
 public static Parser <TToken, T> Choice <TToken, T>(
     IDelayed <ISeq <Parser <TToken, T> > > parsers)
 {
     return(parsers.Force().Case(
                empty: () =>
                Parser.Fail <TToken, T>("Failure: Combinator.Choice"),
                headAndTail: pair =>
                pair.Item0.Or(InternalCombinator.Choice(pair.Item1))));
 }
Ejemplo n.º 10
0
 public static void ForEach <T>(
     this IDelayed <ISeq <T> > delayedSeq,
     Action <T> action)
 {
     foreach (var item in delayedSeq.Force().AsEnumerable())
     {
         action(item);
     }
 }
Ejemplo n.º 11
0
 public static T1 Foldr <T0, T1>(this IDelayed <ISeq <T0> > delayedSeq, T1 init, Func <T0, T1, T1> func)
 {
     return(delayedSeq.Force()
            .Case(
                empty: () =>
                init,
                headAndTail: pair =>
                func(pair.Item0, Seq.Foldr(pair.Item1, init, func))));
 }
Ejemplo n.º 12
0
 public static Boolean Any <T>(
     this IDelayed <ISeq <T> > delayedSeq,
     Func <T, Boolean> predicate)
 {
     return(delayedSeq.Force().Case(
                empty: () => false,
                headAndTail: pair =>
                predicate(pair.Item0) || Seq.Any(pair.Item1, predicate)));
 }
Ejemplo n.º 13
0
 public static Parser <TToken, IDelayed <ISeq <T> > > Sequence <TToken, T>(
     IDelayed <ISeq <Parser <TToken, T> > > parsers)
 {
     return(parsers.Force().Case(
                () =>
                Parser.Return <TToken, IDelayed <ISeq <T> > >(Seq.Empty <T>()),
                pair =>
                pair.Item0.SelectMany(value0 => Sequence(pair.Item1).Select(value1 => Seq.Cons(value0, value1)))));
 }
Ejemplo n.º 14
0
 public static Parser <TToken, IDelayed <ISeq <T> > > Sequence <TToken, T>(
     IDelayed <ISeq <Parser <TToken, T> > > parsers)
 {
     return(parsers.Force().Case(
                empty: () =>
                Parser.Return <TToken, IDelayed <ISeq <T> > >(Seq.Empty <T>()),
                headAndTail: pair =>
                pair.Item0.SelectMany(value0 => InternalCombinator.Sequence(pair.Item1).Select(value1 => Seq.Cons(value0, value1)))));
 }
Ejemplo n.º 15
0
 private TokenStreamImpl(IEnumerator <T> enumerator, Position currentPosition)
 {
     this.enumerator = enumerator;
     Current         = this.enumerator.MoveNext()
                             ? Option.Some(Pair.Return(this.enumerator.Current, currentPosition))
                             : Option.None <IPair <T, Position> >();
     restStream = Delayed.Return(() =>
                                 new TokenStreamImpl <T>(enumerator, new Position(currentPosition.Line, currentPosition.Column + 1)));
 }
Ejemplo n.º 16
0
 public static IDelayed <ISeq <T> > Concat <T>(
     this IDelayed <ISeq <T> > delayedSeq0,
     IDelayed <ISeq <T> > delayedSeq1)
 {
     return(Delayed.FlatMap(delayedSeq0, seq0 =>
                            seq0.Case(
                                empty: () => delayedSeq1,
                                headAndTail: pair =>
                                Seq.Cons(pair.Item0, Delayed.Return(() => Seq.Concat(pair.Item1, delayedSeq1).Force())))));
 }
Ejemplo n.º 17
0
 public static IDelayed <ISeq <T> > Concat <T>(
     this IDelayed <ISeq <T> > delayedSeq0,
     IDelayed <ISeq <T> > delayedSeq1)
 {
     return(delayedSeq0.FlatMap(seq0 =>
                                seq0.Case(
                                    () => delayedSeq1,
                                    pair =>
                                    Cons(pair.Item0, Delayed.Return(() => pair.Item1.Concat(delayedSeq1).Force())))));
 }
Ejemplo n.º 18
0
 public static IDelayed <ISeq <T1> > SelectMany <T0, T1>(
     this IDelayed <ISeq <T0> > delayedSeq,
     Func <T0, IDelayed <ISeq <T1> > > selector)
 {
     return(Delayed.FlatMap(delayedSeq, seq =>
                            seq.Case(
                                empty: () =>
                                Seq.Empty <T1>(),
                                headAndTail: pair =>
                                Seq.Concat(selector(pair.Item0), Delayed.Return(() => pair.Item1.SelectMany(selector).Force())))));
 }
Ejemplo n.º 19
0
 public static IDelayed <ISeq <T> > Where <T>(
     this IDelayed <ISeq <T> > delayedSeq,
     Func <T, Boolean> predicate)
 {
     return(Delayed.FlatMap(delayedSeq, seq =>
                            seq.Case(
                                empty: () => Seq.Empty <T>(),
                                headAndTail: pair => predicate(pair.Item0)
                 ? Seq.Cons(pair.Item0, Delayed.Return(() => pair.Item1.Where(predicate).Force()))
                 : Delayed.Return(() => pair.Item1.Where(predicate).Force()))));
 }
Ejemplo n.º 20
0
 public static IDelayed <ISeq <T> > Where <T>(
     this IDelayed <ISeq <T> > delayedSeq,
     Func <T, bool> predicate)
 {
     return(delayedSeq.FlatMap(seq =>
                               seq.Case(
                                   () => Seq.Empty <T>(),
                                   pair => predicate(pair.Item0)
                                         ? Seq.Cons(pair.Item0, Delayed.Return(() => pair.Item1.Where(predicate).Force()))
                                         : Delayed.Return(() => pair.Item1.Where(predicate).Force()))));
 }
Ejemplo n.º 21
0
 public static IDelayed <ISeq <T1> > Select <T0, T1>(
     this IDelayed <ISeq <T0> > delayedSeq,
     Func <T0, T1> selector)
 {
     return(delayedSeq.FlatMap(seq =>
                               seq.Case(
                                   () =>
                                   Seq.Empty <T1>(),
                                   pair =>
                                   Seq.Cons(selector(pair.Item0), Delayed.Return(() => pair.Item1.Select(selector)).Force()))));
 }
Ejemplo n.º 22
0
        CharStream(CharStream.Reader reader)
        {
            if (reader == null)
            {
                throw new ObjectDisposedException("reader");
            }

            this.reader = reader;
            var currentPosition = this.reader.CurrentPosition;
            var current         = (this.reader.Peek() == CharStream.Reader.EOF)
                ? Option.None <IPair <Char, Position> >()
                : Option.Some <IPair <Char, Position> >(
                Pair.Return <Char, Position>((Char)this.reader.Read(), currentPosition));

            this.Current    = current;
            this.restStream = Delayed.Return(() =>
                                             new CharStream(this.reader));
        }
Ejemplo n.º 23
0
        private CharStream(Reader reader)
        {
            if (reader == null)
            {
                throw new ObjectDisposedException("reader");
            }

            this.reader = reader;
            var currentPosition = this.reader.CurrentPosition;
            var current         = this.reader.Peek() == Reader.EOF
                                ? Option.None <IPair <char, Position> >()
                                : Option.Some(
                Pair.Return((char)this.reader.Read(), currentPosition));

            Current    = current;
            restStream = Delayed.Return(() =>
                                        new CharStream(this.reader));
        }
Ejemplo n.º 24
0
 public static Parser <TToken, T> Lazy <TToken, T>(
     IDelayed <Parser <TToken, T> > delayedParser)
 {
     return(stream => delayedParser.Force()(stream));
 }
 public int CompareTo(IDelayed other)
 {
     return((GetRemainingDelay() - other.GetRemainingDelay()).Milliseconds);
 }
Ejemplo n.º 26
0
 public static IDelayed <T1> SelectMany <T0, T1>(
     this IDelayed <T0> value,
     Func <T0, IDelayed <T1> > selector)
 {
     return(selector(value.Force()));
 }
Ejemplo n.º 27
0
 public static IDelayed <T1> Select <T0, T1>(
     this IDelayed <T0> value,
     Func <T0, T1> selector)
 {
     return(Delayed.Return(() => selector(value.Force())));
 }
Ejemplo n.º 28
0
 public static IDelayed <T1> FlatMap <T0, T1>(
     this IDelayed <T0> value,
     Func <T0, IDelayed <T1> > func)
 {
     return(value.SelectMany(func));
 }
Ejemplo n.º 29
0
 public static IDelayed <T1> Map <T0, T1>(
     this IDelayed <T0> value,
     Func <T0, T1> func)
 {
     return(value.Select(func));
 }
 public int CompareTo(IDelayed other)
 {
     return(GetRemainingDelay().CompareTo(other.GetRemainingDelay()));
 }