public static Future <TR> SelectMany <T, TTR, TR>(this Future <T> a, Func <T, Future <TTR> > fn, Func <T, TTR, TR> cp) => a.SelectMany(x => fn(x).SelectMany(y => Future.Delay(() => cp(x, y))));
public static Future <TOut> Select <T, TOut>(this Future <T> ctx, Func <T, TOut> expr) => ctx.Map(expr);
public static Future <TOut> SelectMany <TIn, TOut>(this Future <TIn> ctx, Func <TIn, Future <TOut> > func) => ctx.FlatMap(func);
public static Future <TOut> Map <TVal, TOut>(this Future <TVal> ctx, Func <TVal, TOut> expr) => ctx.FlatMap(_ => Future.Delay(() => expr(_)));