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 <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())))); }