Definition Mdo {A B:Type} (ma:monad A) (mb:monad B) := ma >>= (λ _, mb).Infix ">>" := Mdo (at level 15, left associativity) : monad_scope.

(* Specifications: *)
Lemma le_lt_Mdo_lt {A B:Type} (ma:monad A) (mb:monad B): Mle ma → Mlt mb → Mlt (ma >> mb).
Lemma lt_le_Mdo_lt {A B:Type} (ma:monad A) (mb:monad B): Mlt ma → Mle mb → Mlt (ma >> mb).
Lemma eq_eq_Mdo_eq {A B:Type} (ma:monad A) (mb:monad B): Meq ma → Meq mb → Meq (ma >> mb).
Lemma lt_lt_Mdo_lt {A B:Type} (ma:monad A) (mb:monad B): Mlt ma → (Mlt mb) → Mlt (ma >> mb).
Lemma mono_mono_Mdo_mono {A B:Type} (ma:monad A) (mb:monad B): Mmono ma → (Mmono mb) → Mmono (ma >> mb).