public static Writer <W, U> M <W, T, U>(Writer <W, T> m, Func <T, U> liftFn) { return(from v in m select liftFn(v)); }
public static Writer <W, D> M <W, A, B, C, D>(Writer <W, A> ma, Writer <W, B> mb, Writer <W, C> mc, Func <A, B, C, D> liftFn) { return(from a in ma from b in mb from c in mc select liftFn(a, b, c)); }
public static Writer <W, IO <U> > IO <W, T, U>(Writer <W, IO <T> > m, Func <T, U> liftFn) { return(from v in m select Lift.M(v, liftFn)); }
public static Writer <W, C> M <W, A, B, C>(Writer <W, A> ma, Writer <W, B> mb, Func <A, B, C> liftFn) { return(from a in ma from b in mb select liftFn(a, b)); }