public static CanCauseError <TOut> ConvertError <TIn, TOut>(this CanCauseError <TIn> error) { if (error.CausedError) { return(error.ConvertError <TOut>()); } else { throw new InvalidCastException(); } }
public static CanCauseError <C> SelectMany <A, B, C>( this CanCauseError <A> a, Func <A, CanCauseError <B> > func, Func <A, B, C> select) { if (a.CausedError) { return(a.ConvertError <C>()); } else { var b = func(a.Result); return(b.CausedError ? b.ConvertError <C>() : select(a.Result, b.Result)); } }
public static CanCauseError <TOut> Map <TIn1, TIn2, TOut>( this Func <TIn1, TIn2, TOut> f, CanCauseError <TIn1> x, CanCauseError <TIn2> y) { if (x.CausedError) { return(x.ConvertError <TOut>()); } else if (y.CausedError) { return(y.ConvertError <TOut>()); } else { return(f(x.Result, y.Result)); } }
public static CanCauseError <TOut> Map <TIn, TOut>( this Func <TIn, TOut> f, CanCauseError <TIn> x) { return(x.CausedError ? x.ConvertError <TOut>() : f(x.Result)); }