Beispiel #1
0
        /// <seealso cref="Fallible.Lift{T1, T2, T3, T4, T5, TResult}"/>
        public static Fallible <TResult> ZipWith <T1, T2, T3, T4, T5, TResult>(
            this Fallible <T1> @this,
            Fallible <T2> second,
            Fallible <T3> third,
            Fallible <T4> fourth,
            Fallible <T5> fifth,
            Func <T1, T2, T3, T4, T5, TResult> zipper)
        {
            /* T4: NotNull(@this) */
            /* T4: NotNull(second) */
            /* T4: NotNull(third) */
            /* T4: NotNull(fourth) */
            /* T4: NotNull(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))));
        }
Beispiel #2
0
 public static Fallible <TSource> PassBy <TSource, TOther>(
     this Fallible <TSource> @this,
     Fallible <TOther> other)
 {
     /* T4: NotNull(@this) */
     return(@this.ZipWith(other, (arg, _) => arg));
 }
Beispiel #3
0
        /// <seealso cref="Fallible.Lift{T1, T2, T3, TResult}"/>
        public static Fallible <TResult> ZipWith <T1, T2, T3, TResult>(
            this Fallible <T1> @this,
            Fallible <T2> second,
            Fallible <T3> third,
            Func <T1, T2, T3, TResult> zipper)
        {
            /* T4: NotNull(@this) */
            /* T4: NotNull(second) */
            /* T4: NotNull(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))));
        }