public static ErrorProne <T2> Bind <T1, T2>(this ErrorProne <T1> a, Func <T1, ErrorProne <T2> > func) { if (a.IsError) { return(ErrorProne <T2> .Error(a.Exception)); } try { return(func(a.Value)); } catch (Exception e) { return(ErrorProne <T2> .Error(e)); } }
public static ErrorProne <T3> SelectMany <T1, T2, T3>(this ErrorProne <T1> a, Func <T1, ErrorProne <T2> > func, Func <T1, T2, T3> select) { return(a.Bind(aval => func(aval).Bind(bval => select(aval, bval).ToErrorProne()))); }
public static ErrorProne <T> ToErrorProne <T>(this T value) { return(ErrorProne <T> .Just(value)); }