public static Lift <RT, C> SelectMany <RT, A, B, C>(this Lift <RT, A> ma, Func <A, Eff <B> > f, Func <A, B, C> project) where RT : struct, HasCancel <RT> => ma.Bind(x => new Lift <RT, B> .Do <B>(f(x), Pure <RT, B>).Map(y => project(x, y)));
public static Lift <RT, B> SelectMany <RT, A, B>(this Lift <RT, A> ma, Func <A, Lift <RT, B> > f) where RT : struct, HasCancel <RT> => ma.Bind(f);
public static Lift <RT, B> SelectMany <RT, A, B>(this Lift <RT, A> ma, Func <A, Eff <B> > f) where RT : struct, HasCancel <RT> => ma.Bind(x => new Lift <RT, B> .Do <B>(f(x), Pure <RT, B>));