示例#1
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())))));
 }
示例#2
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())))));
 }
示例#3
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()))));
 }