Пример #1
0
        /// <seealso cref="Either.Lift{T1, T2, T3, T4, T5, TResult, TRight}"/>
        public static Either <TResult, TRight> ZipWith <T1, T2, T3, T4, T5, TResult, TRight>(
            this Either <T1, TRight> @this,
            Either <T2, TRight> second,
            Either <T3, TRight> third,
            Either <T4, TRight> fourth,
            Either <T5, TRight> fifth,
            Func <T1, T2, T3, T4, T5, TResult> zipper)
        {
            Require.NotNull(@this, nameof(@this));
            Require.NotNull(second, nameof(second));
            Require.NotNull(third, nameof(third));
            Require.NotNull(fourth, nameof(fourth));
            Require.NotNull(fifth, nameof(fifth));
            Require.NotNull(zipper, nameof(zipper));

            // > return @this.Bind(
            // >     arg1 => second.Bind(
            // >         arg2 => third.Bind(
            // >             arg3 => fourth.Bind(
            // >                 arg4 => fifth.Select(
            // >                     arg5 => zipper(arg1, arg2, arg3, arg4, arg5))))));
            return(@this.Bind(
                       arg1 => second.ZipWith(
                           third,
                           fourth,
                           fifth,
                           (arg2, arg3, arg4, arg5) => zipper(arg1, arg2, arg3, arg4, arg5))));
        }
Пример #2
0
 public static Either <TSource, TRight> PassBy <TSource, TOther, TRight>(
     this Either <TSource, TRight> @this,
     Either <TOther, TRight> other)
 {
     Require.NotNull(@this, nameof(@this));
     return(@this.ZipWith(other, (arg, _) => arg));
 }
Пример #3
0
        /// <seealso cref="Either.Lift{T1, T2, T3, TResult, TRight}"/>
        public static Either <TResult, TRight> ZipWith <T1, T2, T3, TResult, TRight>(
            this Either <T1, TRight> @this,
            Either <T2, TRight> second,
            Either <T3, TRight> third,
            Func <T1, T2, T3, TResult> zipper)
        {
            Require.NotNull(@this, nameof(@this));
            Require.NotNull(second, nameof(second));
            Require.NotNull(third, nameof(third));
            Require.NotNull(zipper, nameof(zipper));

            // This is the same as:
            // > return @this.Bind(
            // >     arg1 => second.Bind(
            // >        arg2 => third.Select(
            // >            arg3 => zipper(arg1, arg2, arg3))));
            // but faster if ZipWith is locally shadowed.
            return(@this.Bind(
                       arg1 => second.ZipWith(
                           third, (arg2, arg3) => zipper(arg1, arg2, arg3))));
        }