public Kleisli <C, B> Left <C>(Kleisli <C, A> k) { return(Dot(k)); }
public Kleisli <A, C> Right <C>(Kleisli <B, C> k) { return(k.Dot(this)); }
public Kleisli <C, B> Dot <C>(Kleisli <C, A> k) { return(new Kleisli <C, B>(c => k.RunKleisli(c).Bind(RunKleisli))); }