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));
        }
Beispiel #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> SelectMany <TSuccess, TMessage, TResult>(this Result <TSuccess, TMessage> result,
                                                                                   Func <TSuccess, Result <TResult, TMessage> > func)
 {
     return(Trial.Bind(func, result));
 }