public static IDataflow <Either <TLeft, TRightOutput> > SelectManySafe
 <TLeft, TRightInput, TRightMedium, TRightOutput>(
     this IDataflow <Either <TLeft, TRightInput> > source,
     Func <TRightInput, IEnumerable <Either <TLeft, TRightMedium> > > mediumSelector,
     Func <TRightInput, TRightMedium, TRightOutput> resultSelector)
 {
     return(source.SelectMany(item => item.SelectManySafe(mediumSelector, resultSelector)));
 }
 public static IDataflow <TOutput> SelectMany <TInput, TMedium, TOutput>(this IDataflow <TInput> source,
                                                                         Func <TInput, IDataflow <TMedium> > mediumSelector,
                                                                         Func <TInput, TMedium, TOutput> resultSelector)
 {
     return(source.SelectMany(input =>
                              mediumSelector(input)
                              .Select(medium => resultSelector(input, medium))));
 }
 public static IDataflow <TOutput> SelectMany <TInput, TMedium, TOutput>(this IDataflow <TInput> dataflow,
                                                                         Func <TInput, IEnumerable <TMedium> > mediumSelector,
                                                                         Func <TInput, TMedium, TOutput> resultSelector)
 {
     return(dataflow.SelectMany(input =>
                                mediumSelector(input)
                                .Select(medium => resultSelector(input, medium))));
 }
 public static IDataflow <Either <TLeft, TRightOutput> > SelectMany <TLeft, TRightInput, TRightOutput>(
     this IDataflow <Either <TLeft, TRightInput> > source,
     Func <TRightInput, IEnumerable <TRightOutput> > selector)
 {
     return(source.SelectMany(item => item.SelectMany(selector)));
 }