Exemplo n.º 1
0
 public static IDelayed <ISeq <T> > Of <T>(IEnumerator <T> enumerator)
 {
     return(Delayed.Return(() => enumerator.MoveNext()
                         ? Cons(enumerator.Current, Delayed.Return(() => Of(enumerator).Force()))
                           .Force()
                         : Empty <T>()
                           .Force()));
 }
Exemplo n.º 2
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)));
 }
Exemplo n.º 3
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())))));
 }
 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())))));
 }
Exemplo n.º 5
0
 public static IDelayed <ISeq <T1> > Unfold <T0, T1>(T0 init, Func <T0, IOption <IPair <T1, T0> > > func)
 {
     return(Delayed.Return(() =>
                           func(init).Case(
                               none: () =>
                               Seq.Empty <T1>()
                               .Force(),
                               some: pair =>
                               Seq.Cons(pair.Item0, Delayed.Return(() => Seq.Unfold(pair.Item1, func).Force()))
                               .Force())));
 }
Exemplo n.º 6
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())))));
 }
Exemplo n.º 7
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()))));
 }
 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()))));
 }
 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()))));
 }
Exemplo n.º 10
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));
        }
Exemplo n.º 11
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));
        }
Exemplo n.º 12
0
 public static IDelayed <T1> Select <T0, T1>(
     this IDelayed <T0> value,
     Func <T0, T1> selector)
 {
     return(Delayed.Return(() => selector(value.Force())));
 }
Exemplo n.º 13
0
 public static Parser <TToken, T> Lazy <TToken, T>(
     Func <Parser <TToken, T> > parserFactory)
 {
     return(Lazy(Delayed.Return(parserFactory)));
 }
Exemplo n.º 14
0
 public static IDelayed <ISeq <T> > Cons <T>(T head, IDelayed <ISeq <T> > tail)
 {
     return(Delayed.Return(new ConsImpl <T>(head, tail)));
 }
Exemplo n.º 15
0
 public static IDelayed <ISeq <T> > Empty <T>()
 {
     return(Delayed.Return(SingletonClassHelper <EmptyImpl <T> > .Instance));
 }