Section BasicFacts.
Context {m : Type -> Type}.
Context {EqM : EqM m}.
Context {Mm : Monad m}.
Context {EqMP : @EqMProps m _ EqM}.
Context {ML : @MonadLaws m EqM Mm}.
Instance Proper_Kleisli_apply {a b} :
Proper (eq2 ==> eq ==> eqm) (@Kleisli_apply m a b).
Global Instance Functor_pure
: Functor Fun (Kleisli m) (fun x => x) (@pure m _).
Global Instance Proper_cat_Kleisli {a b c}
: @Proper (Kleisli m a b -> Kleisli m b c -> _)
(eq2 ==> eq2 ==> eq2) cat.
Local Opaque bind ret eqm.

Lemma pure_assoc_l {a b c : Type}
: assoc_l (C := Kleisli m) (bif := sum)
⩯ pure (m := m) (a := a + (b + c))%type assoc_l.