fact: Record class m (v : traceMonad unit) (mv : MonadTrans.t m v) : Type := Class { lift_ret : forall (A : UU0) (a : A), Lift mv (Ret a) = Ret a :> v A ; lift_bind : forall A B (m0 : m A) (f : A -> m B), Lift mv (m0 >>= f) = Lift mv m0 >>= (@MonadTrans.lift _ _ mv _ \o f) :> v B ; drop_ret : forall (A : UU0) (a : A), Drop mv (Ret a) = Ret a :> m A ; drop_bind : forall A B (m0 : v B) (f : B -> v A), Drop mv (m0 >>= f) = Drop mv m0 >>= (@MonadTrans.drop _ _ mv _ \o f) :> m A ; drop_mark : Drop mv (mark tt) = Ret tt }.
imports: ZArith mathcomp(all_ssreflect) infotheo(ssrZ) ihierarchy imonad_lib