public static Promise <C> SelectMany <A, B, C>(this Promise <A> m, Func <A, Promise <B> > k, Func <A, B, C> f) { return(m.Bind(a => k(a).Bind <B, C>(b => f(a, b).PurePromise()))); }
public static Promise <T> Join <T>(this Promise <Promise <T> > promise) { return(promise.Bind(a => a)); }
public static Promise <B> SelectMany <A, B>(this Promise <A> m, Func <A, Promise <B> > k) { return(m.Bind(k)); }