public static STML <A> As <I, A>(this STML <I, Unit, A> x, Action <I> process) { process(x.Input); return(x.Ignore()); }
public static STML <A> As <I, O, A>(this STML <I, O, A> x, Func <I, O> process) => x.Next(process(x.Input));
public static STML <C> SelectMany <A, B, C>(this STML <A> m, Func <A, STML <B> > f, Func <A, B, C> project) => m.Bind(a => f(a).Bind(b => project(a, b).Lift()));
public static STML <A> Ignore <I, A>(this STML <I, Unit, A> x) => x.Next(Unit());
public static STML <B> Select <A, B>(this STML <A> m, Func <A, B> f) => m.Bind(a => f(a).Lift());