Exemplo n.º 1
0
 public static Fin <Func <B, C> > apply <A, B, C>(Func <A, Func <B, C> > fabc, Fin <A> fa)
 {
     if (fa.IsFail)
     {
         return(Fin <Func <B, C> > .Fail(fa.Error));
     }
     return(fabc(fa.Value));
 }
Exemplo n.º 2
0
 public static Fin <B> apply <A, B>(Fin <Func <A, B> > fab, Fin <A> fa)
 {
     if (fab.IsFail)
     {
         return(Fin <B> .Fail(fab.Error));
     }
     if (fa.IsFail)
     {
         return(Fin <B> .Fail(fa.Error));
     }
     return(fab.Value(fa.Value));
 }
Exemplo n.º 3
0
 public static Fin <C> apply <A, B, C>(Func <A, B, C> fabc, Fin <A> fa, Fin <B> fb)
 {
     if (fa.IsFail)
     {
         return(Fin <C> .Fail(fa.Error));
     }
     if (fb.IsFail)
     {
         return(Fin <C> .Fail(fb.Error));
     }
     return(fabc(fa.Value, fb.Value));
 }
Exemplo n.º 4
0
 public static Lst <Fin <B> > Traverse <A, B>(this Fin <Lst <A> > ma, Func <A, B> f) =>
 ma.Match(
     Fail: er => List(Fin <B> .Fail(er)),
     Succ: xs => xs.Map(x => FinSucc(f(x))));
Exemplo n.º 5
0
 public static IEnumerable <Fin <B> > Traverse <A, B>(this Fin <IEnumerable <A> > ma, Func <A, B> f) =>
 ma.Match(
     Fail: er => new[] { Fin <B> .Fail(er) },
     Succ: xs => xs.Map(x => FinSucc(f(x))));
Exemplo n.º 6
0
 public static Fin <A> FinFail <A>(Error value) =>
 Fin <A> .Fail(value);
Exemplo n.º 7
0
 public static Arr <Fin <B> > Traverse <A, B>(this Fin <Arr <A> > ma, Func <A, B> f) =>
 ma.Match(
     Fail: er => Array(Fin <B> .Fail(er)),
     Succ: xs => xs.Map(x => FinSucc(f(x))));
Exemplo n.º 8
0
 public static Identity <Fin <B> > Traverse <A, B>(this Fin <Identity <A> > ma, Func <A, B> f) =>
 ma.Match(
     Succ: x => new Identity <Fin <B> >(f(x.Value)),
     Fail: e => new Identity <Fin <B> >(Fin <B> .Fail(e)));