/// <summary> /// Equivalent to <see cref="IMonad{TSource}"/>, but restricted to <see cref="FuncList{T}"/>. Offers LINQ query support with multiple <c>from</c>-clauses. /// </summary> /// <typeparam name="TSource">The type of the source's value.</typeparam> /// <typeparam name="TMiddle">The type of the selector's result.</typeparam> /// <typeparam name="TResult">The type of the result's value.</typeparam> /// <param name="source">The source.</param> /// <param name="f">The function to apply.</param> /// <param name="resultSelector">The result-selector.</param> public static FuncList <TResult> SelectMany <TSource, TMiddle, TResult> (this FuncList <TSource> source, Func <TSource, FuncList <TMiddle> > f, Func <TSource, TMiddle, TResult> resultSelector) => (FuncList <TResult>)source.Bind(x => (FuncList <TResult>)f(x).Map(y => resultSelector(x, y)));