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())); }
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))); }
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()))))); }
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()))); }
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()))))); }
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())))); }
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)); }
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)); }
public static IDelayed <T1> Select <T0, T1>( this IDelayed <T0> value, Func <T0, T1> selector) { return(Delayed.Return(() => selector(value.Force()))); }
public static Parser <TToken, T> Lazy <TToken, T>( Func <Parser <TToken, T> > parserFactory) { return(Lazy(Delayed.Return(parserFactory))); }
public static IDelayed <ISeq <T> > Cons <T>(T head, IDelayed <ISeq <T> > tail) { return(Delayed.Return(new ConsImpl <T>(head, tail))); }
public static IDelayed <ISeq <T> > Empty <T>() { return(Delayed.Return(SingletonClassHelper <EmptyImpl <T> > .Instance)); }