/// <summary>
 /// Pattern match by providing a function for each case
 /// </summary>
 public static TResult Match <TSuccess, TFailure, TResult>(RopResult <TSuccess, TFailure> ropResult, Func <TSuccess, TResult> successCase, Func <List <TFailure>, TResult> failureCase)
 {
     if (ropResult.IsSuccess)
     {
         return(successCase(ropResult.SuccessValue));
     }
     return(failureCase(ropResult.FailureValues));
 }
 /// <summary>
 /// Select is a synonyms for Lift
 /// </summary>
 public static RopResult <T2, TFailure> Select <T1, T2, TFailure>(RopResult <T1, TFailure> result, Func <T1, T2> func)
 {
     return(Lift <T1, T2, TFailure>(func)(result));
 }