Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From Tealeaves Require Import
Classes.Categorical.DecoratedTraversableMonad
Classes.Kleisli.DecoratedTraversableMonad
CategoricalToKleisli.DecoratedMonad
CategoricalToKleisli.DecoratedFunctor (cobind_dec).Import Product.Notations.Import Kleisli.Monad.Notations.Import Kleisli.DecoratedTraversableMonad.Notations.Import Categorical.Monad.Notations.Import Categorical.TraversableFunctor.Notations.Import Strength.Notations.#[local] Generalizable VariablesW T G ϕ A B C.#[local] Tactic Notation"bring"constr(x) "and"constr(y) "together" :=
change (?f ∘ x ∘ y ∘ ?g) with (f ∘ (x ∘ y) ∘ g).(** * Kleisli DTMs from Categorical DTMs *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceBinddt_Categorical
(W: Type)
(T: Type -> Type)
`{Map T}
`{Decorate W T}
`{ApplicativeDist T}
`{Join T}: Binddt W T T :=
fun (G: Type -> Type) `{Map G} `{Pure G} `{Mult G} (A B: Type)
(f: W * A -> G (T B)) =>
map (F := G) join ∘ dist T G ∘ map f ∘ dec T.EndDerivedOperations.(** ** Derived Instances *)(**********************************************************************)ModuleDerivedInstances.Import DerivedOperations.Sectionadapter.Context
`{Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.Context
(G1: Type -> Type)
`{Map G1} `{Pure G1} `{Mult G1} `{! Applicative G1}
(G2: Type -> Type)
`{Map G2} `{Pure G2} `{Mult G2} `{! Applicative G2}.Definitionkcompose_dtm_alt {ABC} :=
fun `(g: W * B -> G2 (T C))
`(f: W * A -> G1 (T B))
=> (map (F := G1) ((map (F := G2) (μ))
∘ δ T G2
∘ map (F := T) (g ∘ μ (T := (W ×)))
∘ σ
∘ map (F := (W ×)) (dec T)))
∘ σ
∘ cobind (W := (W ×)) f.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type
forall (g : W * B -> G2 (T C)) (f : W * A -> G1 (T B)),
g ⋆7 f = kcompose_dtm_alt g f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type
forall (g : W * B -> G2 (T C)) (f : W * A -> G1 (T B)),
g ⋆7 f = kcompose_dtm_alt g f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B)
g ⋆7 f = kcompose_dtm_alt g f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B)
(fun '(w, a) => map (binddt (preincr g w)) (f (w, a))) =
kcompose_dtm_alt g f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B)
(fun '(w, a) =>
map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T)
(f (w, a))) = kcompose_dtm_alt g f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T)
(f (w, a)) = kcompose_dtm_alt g f (w, a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T)
(f (w, a)) =
(map
(map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T))
∘ σ ∘ cobind f) (w, a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T)
(f (w, a)) =
(map
(map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T))
∘ σ) (cobind f (w, a))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T)
(f (w, a)) =
(map
(map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T))
∘ σ) (w, f (w, a))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T)
(f (w, a)) =
map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T))
(σ (w, f (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A
map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T =
map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)
∘ pair w
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
(map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) t =
(map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)
∘ pair w) t
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ)
(δ T G2 (map (g ○ μ) (σ (map (dec T) (w, t)))))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ)
(δ T G2 (map (g ○ μ) (map (pair (id w)) (dec T t))))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) ((δ T G2 ∘ map (preincr g w)) (dec T t)) =
map (μ)
(δ T G2
((map (g ○ μ) ∘ map (pair (id w))) (dec T t)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ)
(δ T G2 (map (g ○ μ) (map (pair (id w)) (dec T t))))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ)
(δ T G2 (map (g ○ μ) (map (pair (id w)) (dec T t))))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ)
(δ T G2
((map (g ○ μ) ∘ map (pair (id w))) (dec T t)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ) (δ T G2 (map (g ○ μ ∘ pair (id w)) (dec T t)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
map (μ) (δ T G2 (map (preincr g w) (dec T t))) =
map (μ)
(δ T G2
(map (funa : W * B => g (μ (id w, a))) (dec T t)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 A, B, C: Type g: W * B -> G2 (T C) f: W * A -> G1 (T B) w: W a: A t: T B
preincr g w = (funa : W * B => g (μ (id w, a)))
now ext [w' b].Qed.Endadapter.Sectionwith_monad.Context
`{Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
binddt (η ∘ extract) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
binddt (η ∘ extract) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
map (μ) ∘ δ T (funA : Type => A) ∘ map (η ∘ extract)
∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ δ T (funA : Type => A) ∘ map (η ∘ extract)
∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ id ∘ map (η ∘ extract) ∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ map (η ∘ extract) ∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ (map (η) ∘ map extract) ∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ (map (η) ∘ (map extract ∘ dec T)) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ (map (η) ∘ id) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
μ ∘ map (η) ∘ id = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T A: Type
id ∘ id = id
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T
forall (G : Type -> Type) (H5 : Map G) (H6 : Pure G)
(H7 : Mult G),
Applicative G ->
forall (AB : Type) (f : W * A -> G (T B)),
binddt f ∘ η = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T
forall (G : Type -> Type) (H5 : Map G) (H6 : Pure G)
(H7 : Mult G),
Applicative G ->
forall (AB : Type) (f : W * A -> G (T B)),
binddt f ∘ η = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f ∘ η = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ map f ∘ dec T ∘ η = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ map f ∘ (dec T ∘ η) = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ map f ∘ (η ∘ pair (monoid_unit W)) =
f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ map f ∘ η ∘ pair (monoid_unit W) =
f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ (map f ∘ η) ∘ pair (monoid_unit W) =
f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ (η ∘ map f) ∘ pair (monoid_unit W) =
f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ (η ∘ f) ∘ pair (monoid_unit W) =
f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ δ T G ∘ η ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ (δ T G ∘ η) ∘ f ∘ pair (monoid_unit W) =
f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ) ∘ map (η) ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map (μ ∘ η) ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
map id ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G: Type -> Type H5: Map G H6: Pure G H7: Mult G Applicative0: Applicative G A, B: Type f: W * A -> G (T B)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B)
map G1 (binddt g) ∘ binddt f = binddt (g ⋆7 f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B)
map G1 (binddt g) ∘ binddt f = binddt (g ⋆7 f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B)
map G1 (binddt g) ∘ binddt f =
binddt (kcompose_dtm_alt G1 G2 g f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B)
map G1 (binddt g) ∘ binddt f =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* ********** *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B)
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B)
∘ (map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A) =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B)
∘ (map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A) =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B)
∘ (map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A) =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Normalize associativity *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B)
∘ map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Bring together <<map G1 (dec T B)>> and <<map G1 (μ B)>> *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1 (dec T B) ∘ map G1 (μ B) ∘ δ T G1 (T B)
∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ (map G1 (dec T B) ∘ map G1 (μ B)) ∘ δ T G1 (T B)
∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1 (dec T B ∘ μ B) ∘ δ T G1 (T B) ∘ map T f
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T) ∘ dec T (T (W * B))
∘ map T (dec T B)) ∘ δ T G1 (T B) ∘ map T f
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Move <<dec T (T (W * B))>> towards <<dec T A>> *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ (dec T (T (W * B)) ∘ map T (dec T B)))
∘ δ T G1 (T B) ∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ (map (T ○ prod W) (dec T B) ∘ dec T (T B)))
∘ δ T G1 (T B) ∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B) ∘ dec T (T B))
∘ δ T G1 (T B) ∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ (map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B))
∘ map G1 (dec T (T B))) ∘ δ T G1 (T B) ∘ map T f
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B))
∘ map G1 (dec T (T B)) ∘ δ T G1 (T B) ∘ map T f
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B))
∘ (map G1 (dec T (T B)) ∘ δ T G1 (T B)) ∘ map T f
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B))
∘ (δ T G1 (W * T B) ∘ map T (σ) ∘ dec T (G1 (T B)))
∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ dec T (G1 (T B)) ∘ map T f ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ (dec T (G1 (T B)) ∘ map T f) ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ (map (T ○ prod W) f ∘ dec T (W * A))
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ (map (T ∘ prod W) f ∘ dec T (W * A))
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ dec T (W * A)
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f
∘ (dec T (W * A) ∘ dec T A) =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Change decorate-then-decorate into decorate-then-duplicate *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f
∘ (map T cojoin ∘ dec T A) =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (shift T)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Now move <<μ B>> towards <<μ C>> *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (map T (uncurry incr) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B) ∘ map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1
(μ (W * B)
∘ (map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)))
∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f
∘ map T cojoin ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ (map G1 (μ (W * B))
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)))
∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f
∘ map T cojoin ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map G1 (μ (W * B))
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ μ (W * B))
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ (map T g ∘ μ (W * B)))
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ δ T G2 (T C)
∘ (μ (G2 (T C)) ∘ map (T ∘ T) g))
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ μ (G2 (T C))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ (δ T G2 (T C) ∘ μ (G2 (T C)))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C)
∘ (map G2 (μ (T C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C))) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ map G2 (μ (T C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C ∘ μ (T C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Change map-join-then-join into join-then-join *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C ∘ map T (μ C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Now rearrange to match RHS *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C) ∘ map G2 (map T (μ C))
∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1
(map G2 (μ C)
∘ (map G2 (map T (μ C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g))
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map G1 (map G2 (μ C))
∘ map G1
(map G2 (map T (μ C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(map G2 (map T (μ C)) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(map (G2 ∘ T) (μ C) ∘ δ T G2 (T (T C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C) ∘ map (T ○ G2) (μ C)
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C) ∘ map T (map G2 (μ C))
∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ (map T (map G2 (μ C)) ∘ map T (δ T G2 (T C)))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B)
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ)
∘ map T (map (prod W) (dec T B)))
∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f
∘ map T cojoin ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g)
∘ map G1
(map T (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f
∘ map T cojoin ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g)
∘ (map G1
(map T (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ δ T G1 (W * T B)) ∘ map T (σ)
∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g)
∘ (map (G1 ○ T)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ δ T G1 (W * T B)) ∘ map T (σ)
∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g)
∘ (δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map (T ∘ T) g) ∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map T (map T g)) ∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ (map T (map G2 (μ C) ∘ δ T G2 (T C))
∘ map T (map T g))) ∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ map G1
(δ T G2 (T C)
∘ map T (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g))
∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C)
∘ (map G1 (δ T G2 (T C))
∘ map G1
(map T (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)))
∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ map G1
(map T (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g))
∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ map (G1 ○ T) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ δ T G1 (T (W * B))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ (map (G1 ○ T)
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ δ T G1 (T (W * B)))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ (δ T G1 (G2 (T C))
∘ map (T ○ G1)
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g))
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map (T ○ G1) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ (map (T ○ G1)
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)
∘ map (T ○ G1)
(map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map (T ○ G1)
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map (T ○ G1)
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ map T (σ) ∘ map T (map (prod W) f) ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))))
∘ map T (σ) ∘ map T (map (prod W) f) ∘ map T cojoin
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))))
∘ map T (σ) ∘ (map T (map (prod W) f) ∘ map T cojoin)
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))))
∘ map T (σ) ∘ map T (map (prod W) f ∘ cojoin)
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))))
∘ (map T (σ) ∘ map T (map (prod W) f ∘ cojoin))
∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))))
∘ map T (σ ∘ (map (prod W) f ∘ cojoin)) ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ (map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))))
∘ map T (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A =
binddt
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* ********** *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A =
map (G1 ∘ G2) (μ C) ∘ δ T (G1 ∘ G2) (T C)
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
∘ dec T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))
∘ (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A =
map (G1 ∘ G2) (μ C)
∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
∘ dec T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g
∘ map T (μ B) ∘ σ ∘ map (prod W) (dec T B))
∘ σ ∘ map (prod W) f ∘ cojoin) ∘ dec T A =
map (G1 ∘ G2) (μ C)
∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
∘ dec T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C)
∘ (map T g ∘ map T (μ B)) ∘ σ
∘ map (prod W) (dec T B)) ∘ σ ∘ map (prod W) f
∘ cojoin) ∘ dec T A =
map (G1 ∘ G2) (μ C)
∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
∘ dec T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ
∘ map (prod W) f ∘ cojoin) ∘ dec T A =
map (G1 ∘ G2) (μ C)
∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
∘ dec T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C))
∘ δ T G1 (G2 (T C))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ
∘ map (prod W) f ∘ cojoin) ∘ dec T A =
map (G1 ∘ G2) (μ C)
∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)))
∘ map T
(map G1
(map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B)
∘ σ ∘ map (prod W) (dec T B)) ∘ σ
∘ (map (prod W) f ∘ cojoin)) ∘ dec T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (prod W) f ∘ cojoin = cobind f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2
map (prod W) f ∘ cojoin = cobind f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1: Type -> Type H5: Map G1 H6: Pure G1 H7: Mult G1 Applicative0: Applicative G1 G2: Type -> Type H8: Map G2 H9: Pure G2 H10: Mult G2 Applicative1: Applicative G2 B, C: Type g: W * B -> G2 (T C) A: Type f: W * A -> G1 (T B) H11: Functor G1 H12: Functor G2 w: W a: A
(map (prod W) f ∘ cojoin) (w, a) = cobind f (w, a)
reflexivity.Qed.Endbinddt_binddt.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T
forall (G1G2 : Type -> Type) (H5 : Map G1)
(H6 : Mult G1) (H7 : Pure G1) (H8 : Map G2)
(H9 : Mult G2) (H10 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : W * A -> G1 (T B)),
ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T
forall (G1G2 : Type -> Type) (H5 : Map G1)
(H6 : Mult G1) (H7 : Pure G1) (H8 : Map G2)
(H9 : Mult G2) (H10 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : W * A -> G1 (T B)),
ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ
forall (AB : Type) (f : W * A -> G1 (T B)),
ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B)
ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B)
ϕ (T B) ∘ (map (μ) ∘ δ T G1 ∘ map f ∘ dec T) =
map (μ) ∘ δ T G2 ∘ map (ϕ (T B) ∘ f) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B)
ϕ (T B) ∘ map (μ) ∘ δ T G1 ∘ map f ∘ dec T =
map (μ) ∘ δ T G2 ∘ map (ϕ (T B) ∘ f) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B)
ϕ (T B) ∘ map (μ) ∘ δ T G1 ∘ map f =
map (μ) ∘ δ T G2 ∘ map (ϕ (T B) ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B)
(funa : T (W * A) =>
ϕ (T B) (map (μ) (δ T G1 (map f a)))) =
(funa : T (W * A) =>
map (μ) (δ T G2 (map (ϕ (T B) ○ f) a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
ϕ (T B) (map (μ) (δ T G1 (map f t))) =
map (μ) (δ T G2 (map (ϕ (T B) ○ f) t))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
map (μ) (ϕ (T (T B)) (δ T G1 (map f t))) =
map (μ) (δ T G2 (map (ϕ (T B) ○ f) t))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
ϕ (T (T B)) (δ T G1 (map f t)) =
δ T G2 (map (ϕ (T B) ○ f) t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
(ϕ (T (T B)) ∘ δ T G1) (map f t) =
δ T G2 (map (ϕ (T B) ○ f) t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
(δ T G2 ∘ map (ϕ (T B))) (map f t) =
δ T G2 (map (ϕ (T B) ○ f) t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
δ T G2 (map (ϕ (T B)) (map f t)) =
δ T G2 (map (ϕ (T B) ○ f) t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W H: Map T H0: Return T H1: Join T H2: Decorate W T H3: ApplicativeDist T H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad
W T G1, G2: Type -> Type H5: Map G1 H6: Mult G1 H7: Pure G1 H8: Map G2 H9: Mult G2 H10: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: W * A -> G1 (T B) t: T (W * A)
δ T G2 ((map (ϕ (T B)) ∘ map f) t) =
δ T G2 (map (ϕ (T B) ○ f) t)
nowrewrite (fun_map_map (F := T)).Qed.(** ** Typeclass Instances *)(******************************************************************)#[export] Instance: Kleisli.DecoratedTraversableMonad.DecoratedTraversableRightPreModule W T T :=
{|
kdtm_binddt1 := @kdtm_binddt1_T;
kdtm_binddt2 := @kdtm_binddt2_T;
kdtm_morph := @kdtm_morph_T;
|}.#[export] Instance: Kleisli.DecoratedTraversableMonad.DecoratedTraversableMonad W T :=
{| kdtm_binddt0 := @kdtm_binddt0_T;
kdtm_monoid := dmon_monoid;
|}.Endwith_monad.EndDerivedInstances.