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> Map <TVal, TOut>(this Future <TVal> ctx, Func <TVal, TOut> expr) => ctx.FlatMap(_ => Future.Delay(() => expr(_)));