public static Result <TResult, TMessage> SelectMany <TSuccess, TMessage, TValue, TResult>(
            this Result <TSuccess, TMessage> result,
            Func <TSuccess, Result <TValue, TMessage> > func,
            Func <TSuccess, TValue, TResult> mapperFunc)
        {
            Func <TSuccess, Func <TValue, TResult> > curriedMapper = suc => val => mapperFunc(suc, val);
            Func <
                Result <TSuccess, TMessage>,
                Result <TValue, TMessage>,
                Result <TResult, TMessage>
                > liftedMapper = (a, b) => Trial.Lift2(curriedMapper, a, b);
            var   v            = Trial.Bind(func, result);

            return(liftedMapper(result, v));
        }
Exemplo n.º 2
0
        public static Result <TResult, TMessage> SelectMany <TSuccess, TMessage, TValue, TResult>(
            this Result <TSuccess, TMessage> result,
            Func <TSuccess, Result <TValue, TMessage> > func,
            Func <TSuccess, TValue, TResult> mapperFunc)
        {
            if (func == null)
            {
                throw new ArgumentException(nameof(func));
            }
            if (mapperFunc == null)
            {
                throw new ArgumentException(nameof(mapperFunc));
            }

            Func <TSuccess, Func <TValue, TResult> > curriedMapper = suc => val => mapperFunc(suc, val);
            Func <
                Result <TSuccess, TMessage>,
                Result <TValue, TMessage>,
                Result <TResult, TMessage>
                > liftedMapper = (a, b) => Trial.Lift2(curriedMapper, a, b);
            var   v            = Trial.Bind(func, result);

            return(liftedMapper(result, v));
        }
 public static Result <TResult, TMessage> Select <TSuccess, TMessage, TResult>(this Result <TSuccess, TMessage> result,
                                                                               Func <TSuccess, TResult> func)
 {
     return(Trial.Lift(func, result));
 }
 public static Result <TResult, TMessage> SelectMany <TSuccess, TMessage, TResult>(this Result <TSuccess, TMessage> result,
                                                                                   Func <TSuccess, Result <TResult, TMessage> > func)
 {
     return(Trial.Bind(func, result));
 }
 public static Result <IEnumerable <TSuccess>, TMessage> Collect <TSuccess, TMessage>(
     this IEnumerable <Result <TSuccess, TMessage> > values)
 {
     return(Trial.Collect(values));
 }
Exemplo n.º 6
0
 public static TResult Either <TSuccess, TMessage, TResult>(this Result <TSuccess, TMessage> result,
                                                            Func <TSuccess, IEnumerable <TMessage>, TResult> ifSuccess,
                                                            Func <IEnumerable <TMessage>, TResult> ifFailure)
 {
     return(Trial.Either(ifSuccess, ifFailure, result));
 }