Tealeaves.Classes.Full.DecoratedMonad
From Tealeaves Require Export
Classes.Kleisli.DecoratedMonad.
Import DecoratedMonad.Notations.
Import Kleisli.Comonad.Notations.
Import Kleisli.Monad.Notations.
Import Product.Notations.
#[local] Generalizable Variables W T U A B C.
Class DecoratedMonadFull
(W: Type)
(T: Type → Type)
`{ret_inst: Return T}
`{Bindd_inst: Bindd W T T}
`{Mapd_inst: Mapd W T}
`{Bind_inst: Bind T T}
`{Map_inst: Map T}
`{op: Monoid_op W} `{unit: Monoid_unit W}
:=
{ kmondf_kmond :> DecoratedMonad W T;
kmondf_map_compat :> Compat_Map_Bindd W T T;
kmondf_mapd_compat :> Compat_Mapd_Bindd W T T;
kmondf_bind_compat :> Compat_Bind_Bindd W T T;
}.
Class DecoratedRightModuleFull
(W: Type)
(T: Type → Type)
(U: Type → Type)
`{ret_inst: Return T}
`{Bindd_T_inst: Bindd W T T}
`{Bindd_U_inst: Bindd W T U}
`{Mapd_T_inst: Mapd W T}
`{Mapd_U_inst: Mapd W U}
`{Bind_T_inst: Bind T T}
`{Bind_U_inst: Bind T U}
`{Map_T_inst: Map T}
`{Map_U_inst: Map U}
`{op: Monoid_op W}
`{unit: Monoid_unit W}
:=
{ kmoddf_kmond :> DecoratedMonadFull W T;
kmoddf_mod :> DecoratedRightModule W T U;
kmoddf_map_compat :> Compat_Map_Bindd W T U;
kmoddf_mapd_compat :> Compat_Mapd_Bindd W T U;
kmoddf_bind_compat :> Compat_Bind_Bindd W T U;
}.
Section MonadFull.
Import DecoratedMonad.DerivedOperations.
#[local] Instance DecoratedMonadFull_DecoratedMonad
(W: Type) (T: Type → Type)
`{Monad_inst: DecoratedMonad W T} :
DecoratedMonadFull W T
(Map_inst := Map_Bindd W T T)
(Mapd_inst := Mapd_Bindd W T T)
(Bind_inst := Bind_Bindd W T T)
:=
{| kmondf_kmond := _
|}.
#[local] Instance DecoratedRightModuleFull_DecoratedRightModule
(W: Type) (T: Type → Type) (U: Type → Type)
`{Module_inst: DecoratedRightModule W T U} :
DecoratedRightModuleFull W T U
(Map_T_inst := Map_Bindd W T T)
(Map_U_inst := Map_Bindd W T U)
(Mapd_T_inst := Mapd_Bindd W T T)
(Mapd_U_inst := Mapd_Bindd W T U)
(Bind_T_inst := Bind_Bindd W T T)
(Bind_U_inst := Bind_Bindd W T U) :=
{| kmoddf_kmond := _
|}.
#[local] Instance DecoratedRightModuleFull_DecoratedMonadFull
(W: Type) (T: Type → Type)
`{Monad_inst: DecoratedMonadFull W T} :
DecoratedRightModuleFull W T T.
Proof.
constructor.
- typeclasses eauto.
- apply DecoratedRightModule_DecoratedMonad.
apply kmondf_kmond.
- typeclasses eauto.
- typeclasses eauto.
- typeclasses eauto.
Qed.
End MonadFull.
Classes.Kleisli.DecoratedMonad.
Import DecoratedMonad.Notations.
Import Kleisli.Comonad.Notations.
Import Kleisli.Monad.Notations.
Import Product.Notations.
#[local] Generalizable Variables W T U A B C.
Class DecoratedMonadFull
(W: Type)
(T: Type → Type)
`{ret_inst: Return T}
`{Bindd_inst: Bindd W T T}
`{Mapd_inst: Mapd W T}
`{Bind_inst: Bind T T}
`{Map_inst: Map T}
`{op: Monoid_op W} `{unit: Monoid_unit W}
:=
{ kmondf_kmond :> DecoratedMonad W T;
kmondf_map_compat :> Compat_Map_Bindd W T T;
kmondf_mapd_compat :> Compat_Mapd_Bindd W T T;
kmondf_bind_compat :> Compat_Bind_Bindd W T T;
}.
Class DecoratedRightModuleFull
(W: Type)
(T: Type → Type)
(U: Type → Type)
`{ret_inst: Return T}
`{Bindd_T_inst: Bindd W T T}
`{Bindd_U_inst: Bindd W T U}
`{Mapd_T_inst: Mapd W T}
`{Mapd_U_inst: Mapd W U}
`{Bind_T_inst: Bind T T}
`{Bind_U_inst: Bind T U}
`{Map_T_inst: Map T}
`{Map_U_inst: Map U}
`{op: Monoid_op W}
`{unit: Monoid_unit W}
:=
{ kmoddf_kmond :> DecoratedMonadFull W T;
kmoddf_mod :> DecoratedRightModule W T U;
kmoddf_map_compat :> Compat_Map_Bindd W T U;
kmoddf_mapd_compat :> Compat_Mapd_Bindd W T U;
kmoddf_bind_compat :> Compat_Bind_Bindd W T U;
}.
Section MonadFull.
Import DecoratedMonad.DerivedOperations.
#[local] Instance DecoratedMonadFull_DecoratedMonad
(W: Type) (T: Type → Type)
`{Monad_inst: DecoratedMonad W T} :
DecoratedMonadFull W T
(Map_inst := Map_Bindd W T T)
(Mapd_inst := Mapd_Bindd W T T)
(Bind_inst := Bind_Bindd W T T)
:=
{| kmondf_kmond := _
|}.
#[local] Instance DecoratedRightModuleFull_DecoratedRightModule
(W: Type) (T: Type → Type) (U: Type → Type)
`{Module_inst: DecoratedRightModule W T U} :
DecoratedRightModuleFull W T U
(Map_T_inst := Map_Bindd W T T)
(Map_U_inst := Map_Bindd W T U)
(Mapd_T_inst := Mapd_Bindd W T T)
(Mapd_U_inst := Mapd_Bindd W T U)
(Bind_T_inst := Bind_Bindd W T T)
(Bind_U_inst := Bind_Bindd W T U) :=
{| kmoddf_kmond := _
|}.
#[local] Instance DecoratedRightModuleFull_DecoratedMonadFull
(W: Type) (T: Type → Type)
`{Monad_inst: DecoratedMonadFull W T} :
DecoratedRightModuleFull W T T.
Proof.
constructor.
- typeclasses eauto.
- apply DecoratedRightModule_DecoratedMonad.
apply kmondf_kmond.
- typeclasses eauto.
- typeclasses eauto.
- typeclasses eauto.
Qed.
End MonadFull.