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_r {a b c : Type} :
(@assoc_r _ (Kleisli m) sum _ _ _ _) ⩯ (@pure m _ ((a + b) + c)%type _ assoc_r).