public static async Task <Result <TResult, TError> > FoldAsync <TResult, T, TError>( this IEnumerable <Result <T, TError> > values, Result <TResult, TError> seed, Func <TError, TError, TError> mergeFunc, Func <TResult, T, Task <TResult> > aggrFunc) => await EnumerableExtensions.FoldAsync(values, seed, (acc, value) => AggrHelper.FuncAsync(acc, value, aggrFunc, mergeFunc)) .ConfigureAwait(false);
//Reduce on List<Option<T>> public static async Task <Option <T> > ReduceAsync <T>(this IEnumerable <Option <T> > values, Func <T, T, Task <T> > aggrFunc) { using (var enumerator = values.ThrowIfDefault(nameof(values)).GetEnumerator()) { return(await InternalList.ReduceInternalAsync(enumerator, (acc, val) => AggrHelper.FuncAsync(acc, val, aggrFunc)) .ConfigureAwait(false)); } }
//TryReduceUntil on Result<T, TError> public static Task <Option <Result <T, TError> > > TryReduceUntilAsync <T, TError>(this IEnumerable <Result <T, TError> > values, Func <T, T, Task <T> > aggrFunc) => values.ThrowIfDefault(nameof(values)).TryReduceUntilAsync( (acc, val) => AggrHelper.FuncUntilAsync(acc, val, aggrFunc));
public static Task <Option <Result <T, TError> > > TryReduceAsync <T, TError>(this IEnumerable <Result <T, TError> > values, Func <T, T, Task <T> > aggrFunc) where TError : IPlus <TError, TError> => values.ThrowIfDefault(nameof(values)).TryReduceAsync( (acc, value) => AggrHelper.FuncAsync(acc, value, aggrFunc, PlusHelper.Plus));
//Reduce on Result<T, TError> public static Task <Result <T, TError> > ReduceAsync <T, TError>(this IEnumerable <Result <T, TError> > values, Func <TError, TError, TError> mergeFunc, Func <T, T, Task <T> > aggrFunc) => values.ThrowIfDefault(nameof(values)).ReduceAsync( (acc, value) => AggrHelper.FuncAsync(acc, value, aggrFunc, mergeFunc));
public static Task <Result <TResult, TError> > FoldUntilAsync <TResult, T, TError>(this IEnumerable <Result <T, TError> > values, Result <TResult, TError> seed, Func <TResult, T, Task <TResult> > aggrFunc) => values.ThrowIfDefault(nameof(values)).FoldUntilAsync(seed, (acc, value) => AggrHelper.FuncUntilAsync(acc, value, aggrFunc));
public static async Task <Result <TResult> > FoldUntilAsync <TResult, T>(this IEnumerable <Result <T> > values, Result <TResult> seed, Func <TResult, T, Task <TResult> > aggrFunc) => await values.FoldUntilAsync(seed, (acc, value) => AggrHelper.FuncUntilAsync(acc, value, aggrFunc)) .ConfigureAwait(false);