public CoKleisli <C, B> Left <C>(CoKleisli <C, A> k)
 {
     return(Dot(k));
 }
 public CoKleisli <A, C> Right <C>(CoKleisli <B, C> k)
 {
     return(k.Dot(this));
 }
 public CoKleisli <C, B> Dot <C>(CoKleisli <C, A> k)
 {
     return(new CoKleisli <C, B>(c => RunCoKleisli(c.Extend(cp => k.RunCoKleisli(cp)))));
 }