Tealeaves.Classes.Categorical.TraversableMonad2
From Tealeaves Require Export
Classes.Categorical.Monad2
Classes.Categorical.TraversableFunctor2.
#[local] Generalizable Variables G.
Classes.Categorical.Monad2
Classes.Categorical.TraversableFunctor2.
#[local] Generalizable Variables G.
Class TraversableMonad2
(T: Type → Type → Type)
`{Map2 T} `{ApplicativeDist2 T}
`{∀ B, Return (T B)}
`{∀ B, Join (T B)} :=
{
xxx_functor :> Functor2 T;
xxx_traversable :> TraversableFunctor2 T;
xxx_decoratedmonad :> Monad2 T;
xxx_dist2_ret:
∀ (B V: Type) `{Applicative G},
dist2 ∘ ret (T := T (G B)) (A := G V) =
map (F := G) (ret (T := T B) (A := V));
xxx_dist2_join:
∀ (B V: Type) `{Applicative G},
dist2 ∘ join (T := T (G B)) (A := (G V)) =
map (F := G) (join (T := T B)) ∘
dist2 (T := T) (G := G) ∘
map2 (F := T) id (dist2);
}.
(T: Type → Type → Type)
`{Map2 T} `{ApplicativeDist2 T}
`{∀ B, Return (T B)}
`{∀ B, Join (T B)} :=
{
xxx_functor :> Functor2 T;
xxx_traversable :> TraversableFunctor2 T;
xxx_decoratedmonad :> Monad2 T;
xxx_dist2_ret:
∀ (B V: Type) `{Applicative G},
dist2 ∘ ret (T := T (G B)) (A := G V) =
map (F := G) (ret (T := T B) (A := V));
xxx_dist2_join:
∀ (B V: Type) `{Applicative G},
dist2 ∘ join (T := T (G B)) (A := (G V)) =
map (F := G) (join (T := T B)) ∘
dist2 (T := T) (G := G) ∘
map2 (F := T) id (dist2);
}.