Пример #1
0
 public static CondAsync <A, D> SelectMany <A, B, C, D>(
     this CondAsync <A, B> self,
     Func <B, CondAsync <A, C> > bind,
     Func <B, C, D> project) =>
 input =>
 from b in self(input)
 from c in b.Match(
     Some: b1 => bind(b1)(input),
     None: () => Option <C> .None.AsTask())
 select(from x in b
        from y in c
        select project(x, y));
Пример #2
0
 public static CondAsync <A, B> All <A, B>(this CondAsync <A, B> self, params Func <B, bool>[] predicates) =>
 env =>
 self(env).BindAsync(
     input =>
 {
     foreach (var pred in predicates)
     {
         if (!pred(input))
         {
             return(None);
         }
     }
     return(Optional(input));
 })
 .ToOption();
Пример #3
0
 public static CondAsync <A, B> Then <A, B>(this CondAsync <A, A> self, Func <A, Task <B> > f) =>
 self.Select(f);
Пример #4
0
 public static CondAsync <A, B> Then <A, B>(this CondAsync <A, A> self, B value) =>
 self.Select(_ => value);
Пример #5
0
 public static CondAsync <A, B> Then <A, B>(this CondAsync <A, A> self, Func <B> f) =>
 self.Select(_ => f());
Пример #6
0
 public static CondAsync <A, B> Where <A, B>(this CondAsync <A, B> self, Func <B, Task <bool> > pred) =>
 input =>
 from b in self(input)
 from p in b.Map(pred).IfNone(false.AsTask())
 select p ? b : None;
Пример #7
0
 public static CondAsync <A, B> Where <A, B>(this CondAsync <A, B> self, Func <B, bool> pred) =>
 input =>
 from b in self(input)
 select b.Map(pred).IfNone(false) ? b : None;
Пример #8
0
 public static CondAsync <A, C> Select <A, B, C>(this CondAsync <A, B> self, Func <B, C> map) =>
 input =>
 from b in self(input)
 select b.Map(map);
Пример #9
0
 public static CondAsync <A, C> Map <A, B, C>(this CondAsync <A, B> self, Func <B, C> map) =>
 Select(self, map);
Пример #10
0
 public static Func <Task <A>, Task <B> > ElseAsync <A, B>(this CondAsync <A, B> self, B value) =>
 input =>
 from a in input
 from b in self(a).ContinueWith(b => b.Result.IfNone(value))
 select b;
Пример #11
0
 public static Func <A, Task <B> > Else <A, B>(this CondAsync <A, B> self, B value) =>
 input =>
 self(input).ContinueWith(b => b.Result.IfNone(value));
Пример #12
0
 public static Func <A, Task <B> > Else <A, B>(this CondAsync <A, B> self, Func <B> f) =>
 input =>
 self(input).ContinueWith(b => b.Result.IfNone(() => f()));