public static Func <CmdResult <T>, CmdResult <V> > Bind <T, V>(this Func <T, CmdResult <V> > f) { return(x => { if (x.IsFailure) { return CmdResult.Fail <V>(x.Message); } return f(x.Data); }); }
public static Func <CmdResult <T>, CmdResult <V> > DoubleMap <T, V>(this Func <T, V> success, Func <string, string> failure) { return(x => { if (x.IsFailure) { return CmdResult.Fail <V>(failure(x.Message)); } return CmdResult.Success(success(x.Data)); }); }
public static Func <T, CmdResult <V> > TryCatch <T, V>(this Func <T, CmdResult <V> > f) { return(x => { try { return f(x); } catch (Exception exc) { return CmdResult.Fail <V>(exc.Message); } }); }
public static Func <T, CmdResult <V> > Switch <T, V>(this Func <T, V> f) => x => CmdResult.Success(f(x));