Esempio n. 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));
Esempio n. 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();
Esempio n. 3
0
 public static CondAsync <A, B> Then <A, B>(this CondAsync <A, A> self, Func <A, Task <B> > f) =>
 self.Select(f);
Esempio n. 4
0
 public static CondAsync <A, B> Then <A, B>(this CondAsync <A, A> self, B value) =>
 self.Select(_ => value);
Esempio n. 5
0
 public static CondAsync <A, B> Then <A, B>(this CondAsync <A, A> self, Func <B> f) =>
 self.Select(_ => f());
Esempio n. 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;
Esempio n. 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;
Esempio n. 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);
Esempio n. 9
0
 public static CondAsync <A, C> Map <A, B, C>(this CondAsync <A, B> self, Func <B, C> map) =>
 Select(self, map);
Esempio n. 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;
Esempio n. 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));
Esempio n. 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()));