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)));
 }