Definition extFlipped (M: Monad): extMonad M -> forall A (x: M A) (B: Set) (f g: A -> M B), ext_eq f g -> bind x f = bind x g.

(* Specifications: *)
Lemma mon_lunit_under_bind (M: Monad) (A B C: Set) (a: M A) (b: A -> B) (f: A -> B -> M C): extMonad M -> (x <- a ; (ret (b x) >>= f x)) = (x <- a ; f x (b x)).