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));