public static AsyncMaybe <TResult> ZipAsync <T1, T2, TResult>(
            this AsyncMaybe <T1> first,
            AsyncMaybe <T2> second,
            [InstantHandle, NotNull] Func <T1, T2, Task <TResult> > zipper
            )
        {
            if (zipper == null)
            {
                throw new ArgumentNullException(nameof(zipper));
            }

            return(first.FlatMap(
                       some1 => second.MapAsync(
                           some2 => zipper(some1, some2)
                           )
                       ));
        }
        public static AsyncMaybe <TResult> ZipAsync <T1, T2, T3, T4, TResult>(
            this AsyncMaybe <T1> first,
            AsyncMaybe <T2> second,
            AsyncMaybe <T3> third,
            AsyncMaybe <T4> fourth,
            [InstantHandle, NotNull] Func <T1, T2, T3, T4, Task <TResult> > zipper
            )
        {
            if (zipper == null)
            {
                throw new ArgumentNullException(nameof(zipper));
            }

            return(first.FlatMap <T1, TResult>(
                       some1 => second.FlatMap <T2, TResult>(
                           some2 => third.FlatMap <T3, TResult>(
                               some3 => fourth.MapAsync <T4, TResult>(
                                   some4 => zipper(some1, some2, some3, some4)
                                   )
                               )
                           )
                       ));
        }
Ejemplo n.º 3
0
 public static AsyncMaybe <TResult> SelectAsync <T, TResult>(
     this AsyncMaybe <T> source,
     [NotNull] Func <T, Task <TResult> > mapper
     ) => source.MapAsync(mapper);