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
Adapters.CategoricalToKleisli.DecoratedTraversableMonad
Adapters.KleisliToCategorical.DecoratedTraversableMonad.Import Product.Notations.Import Kleisli.Monad.Notations.#[local] Generalizable VariableT W.(** * Categorical ~> Kleisli ~> Categorical *)(**********************************************************************)ModuleRoundtrip1.Context
`{Monoid W}
`{mapT: Map T}
`{distT: ApplicativeDist T}
`{joinT: Join T}
`{decorateT: Decorate W T}
`{Return T}
`{! Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.#[local] Instancebinddt': Binddt W T T :=
DerivedOperations.Binddt_Categorical W T.Definitionmap': Map T :=
DerivedOperations.Map_Binddt W T T.Definitionjoin': Join T :=
DerivedOperations.Join_Binddt W T.Definitiondecorate': Decorate W T :=
DerivedOperations.Decorate_Binddt W T.Definitiondist': ApplicativeDist T :=
DerivedOperations.Dist_Binddt W T.
mapT = map'
mapT = map'
mapT = DerivedOperations.Map_Binddt W T T
mapT =
(fun (AB : Type) (f : A -> B) =>
binddt (ret ∘ f ∘ extract))
mapT =
(fun (AB : Type) (f : A -> B) =>
DerivedOperations.Binddt_Categorical W T
(funA0 : Type => A0) Map_I Pure_I Mult_I A B
(ret ∘ f ∘ extract))
mapT =
(fun (AB : Type) (f : A -> B) =>
map join ∘ dist T (funA0 : Type => A0)
∘ map (ret ∘ f ∘ extract) ∘ dec T)
A, B: Type f: A -> B
mapT A B f =
map join ∘ dist T (funA : Type => A)
∘ map (ret ∘ f ∘ extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ dist T (funA : Type => A)
∘ map (ret ∘ f ∘ extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ id ∘ map (ret ∘ f ∘ extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f = join ∘ map (ret ∘ f ∘ extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ (map ret ∘ map f ∘ map extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ map ret ∘ map f ∘ map extract ∘ dec T
A, B: Type f: A -> B
mapT A B f = id ∘ map f ∘ map extract ∘ dec T
A, B: Type f: A -> B
mapT A B f = map f ∘ map extract ∘ dec T
A, B: Type f: A -> B
mapT A B f = map f ∘ (map extract ∘ dec T)
A, B: Type f: A -> B
mapT A B f = map f ∘ id
reflexivity.Qed.
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
distT G Map_G Pure_G Mult_G =
dist' G Map_G Pure_G Mult_G
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
distT G Map_G Pure_G Mult_G =
dist' G Map_G Pure_G Mult_G
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G
distT G Map_G Pure_G Mult_G =
dist' G Map_G Pure_G Mult_G
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G
distT G Map_G Pure_G Mult_G =
DerivedOperations.Dist_Binddt W T G Map_G Pure_G
Mult_G
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G
distT G Map_G Pure_G Mult_G =
(funA : Type => binddt (map ret ∘ extract))
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G
distT G Map_G Pure_G Mult_G =
(funA : Type =>
DerivedOperations.Binddt_Categorical W T G Map_G
Pure_G Mult_G (G A) A (map ret ∘ extract))
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G
distT G Map_G Pure_G Mult_G =
(funA : Type =>
map join ∘ dist T G ∘ map (map ret ∘ extract) ∘ dec T)
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ dist T G ∘ map (map ret ∘ extract) ∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ dist T G ∘ (map (map ret) ∘ map extract)
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ dist T G ∘ (map (map ret) ∘ map extract)
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ dist T G ∘ map (map ret) ∘ map extract
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ (dist T G ∘ map (map ret)) ∘ map extract
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ (dist T G ∘ map ret) ∘ map extract ∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ (map ret ∘ dist T G) ∘ map extract ∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ (map (map ret) ∘ dist T G) ∘ map extract
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
distT G Map_G Pure_G Mult_G A =
map join ∘ map (map ret) ∘ dist T G ∘ map extract
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map f x, map g y) =
map (map_tensor f g) (mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map left_unitor (mult (pure tt, x)) = x app_unital_r: forall (A : Type) (x : G A),
map right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
distT G Map_G Pure_G Mult_G A =
map join ∘ map (map ret) ∘ dist T G ∘ map extract
∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map f x, map g y) =
map (map_tensor f g) (mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map left_unitor (mult (pure tt, x)) = x app_unital_r: forall (A : Type) (x : G A),
map right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
distT G Map_G Pure_G Mult_G A =
map (join ∘ map ret) ∘ dist T G ∘ map extract ∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map f x, map g y) =
map (map_tensor f g) (mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map left_unitor (mult (pure tt, x)) = x app_unital_r: forall (A : Type) (x : G A),
map right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
distT G Map_G Pure_G Mult_G A =
map id ∘ dist T G ∘ map extract ∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map f x, map g y) =
map (map_tensor f g) (mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map left_unitor (mult (pure tt, x)) = x app_unital_r: forall (A : Type) (x : G A),
map right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
distT G Map_G Pure_G Mult_G A =
id ∘ dist T G ∘ map extract ∘ dec T
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map f x, map g y) =
map (map_tensor f g) (mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map left_unitor (mult (pure tt, x)) = x app_unital_r: forall (A : Type) (x : G A),
map right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
distT G Map_G Pure_G Mult_G A =
id ∘ dist T G ∘ (map extract ∘ dec T)
G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map f x, map g y) =
map (map_tensor f g) (mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map left_unitor (mult (pure tt, x)) = x app_unital_r: forall (A : Type) (x : G A),
map right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
distT G Map_G Pure_G Mult_G A = id ∘ dist T G ∘ id
reflexivity.Qed.
joinT = join'
joinT = join'
joinT = DerivedOperations.Join_Binddt W T
joinT = (funA : Type => binddt extract)
joinT =
(funA : Type =>
DerivedOperations.Binddt_Categorical W T
(funA0 : Type => A0) Map_I Pure_I Mult_I (T A) A
extract)
joinT =
(funA : Type =>
map join ∘ dist T (funA0 : Type => A0) ∘ map extract
∘ dec T)
A: Type
joinT A =
map join ∘ dist T (funA : Type => A) ∘ map extract
∘ dec T
A: Type
joinT A = map join ∘ id ∘ map extract ∘ dec T
A: Type
joinT A = map join ∘ id ∘ (map extract ∘ dec T)
A: Type
joinT A = map join ∘ id ∘ id
reflexivity.Qed.
decorateT = decorate'
decorateT = decorate'
decorateT = DerivedOperations.Decorate_Binddt W T
decorateT = (funA : Type => binddt ret)
decorateT =
(funA : Type =>
DerivedOperations.Binddt_Categorical W T
(funA0 : Type => A0) Map_I Pure_I Mult_I A (W * A)
ret)
decorateT =
(funA : Type =>
join ∘ dist T (funA0 : Type => A0) ∘ map ret ∘ dec T)
A: Type
decorateT A =
join ∘ dist T (funA : Type => A) ∘ map ret ∘ dec T
A: Type
decorateT A = join ∘ id ∘ map ret ∘ dec T
A: Type
decorateT A = join ∘ map ret ∘ dec T
A: Type
decorateT A = id ∘ dec T
reflexivity.Qed.EndRoundtrip1.(** * Kleisli ~> Categorical ~> Kleisli *)(**********************************************************************)ModuleRoundtrip2.Sectionsection.Context
`{Kleisli.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.Definitionmap': Map T :=
DerivedOperations.Map_Binddt W T T.Definitiondist': ApplicativeDist T :=
DerivedOperations.Dist_Binddt W T.Definitionjoin': Join T :=
DerivedOperations.Join_Binddt W T.Definitiondecorate': Decorate W T :=
DerivedOperations.Decorate_Binddt W T.Definitionbinddt2: Binddt W T T :=
DerivedOperations.Binddt_Categorical W T
(H := map') (H0 := decorate') (H2 := join') (H1 := dist').#[local] Tactic Notation"binddt_to_bindd" :=
rewrite <- bindd_to_binddt.#[local] Tactic Notation"binddt_to_bindt" :=
rewrite <- bindt_to_binddt.#[local] Tactic Notation"bindd_to_map" :=
rewrite <- map_to_bindd.Import Kleisli.DecoratedTraversableMonad.DerivedOperations.Import Kleisli.DecoratedTraversableMonad.DerivedInstances.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
@binddt W T T Bindd_T_inst G Map_G Pure_G Mult_G =
binddt2 G Map_G Pure_G Mult_G
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
@binddt W T T Bindd_T_inst G Map_G Pure_G Mult_G =
binddt2 G Map_G Pure_G Mult_G
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G
@binddt W T T Bindd_T_inst G Map_G Pure_G Mult_G =
binddt2 G Map_G Pure_G Mult_G
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = binddt2 G Map_G Pure_G Mult_G A B f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
DerivedOperations.Binddt_Categorical W T G Map_G
Pure_G Mult_G A B f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = map join ∘ dist T G ∘ map f ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ dist T G ∘ binddt (ret ∘ f ∘ extract)
∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (map ret ∘ extract)
∘ binddt (ret ∘ f ∘ extract) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (map ret ∘ extract)
∘ binddt (ret ∘ f ∘ extract) ∘ binddt ret
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (map ret ∘ extract)
∘ bindd (ret ∘ f ∘ extract) ∘ binddt ret
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (map ret ∘ extract)
∘ bindd (ret ∘ f ∘ extract) ∘ bindd ret
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ bindt (map ret) ∘ bindd (ret ∘ f ∘ extract)
∘ bindd ret
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ bindt (map ret) ∘ map f ∘ bindd ret
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ bindt (map ret) ∘ (map f ∘ bindd ret)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ bindt (map ret) ∘ (map f ∘ bindd ret)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ bindt (map ret) ∘ bindd (map f ∘ ret)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ (bindt (map ret) ∘ bindd (map f ∘ ret))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ (bindt (map ret) ∘ bindd (map f ∘ ret))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (bindt (map ret) ∘ (map f ∘ ret))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (bindt (map ret) ∘ map f ∘ ret)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
map join ∘ binddt (bindt (map ret ∘ f) ∘ ret)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = map join ∘ binddt (map ret ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = map (binddt extract) ∘ binddt (map ret ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = map (binddt extract) ∘ binddt (map ret ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
binddt
(kc7 G (funA : Type => A) extract (map ret ∘ f))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f =
binddt
(kc7 G (funA : Type => A) extract (map ret ∘ f))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = binddt (kc3 extract f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = binddt (kc3 (id ∘ extract) f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)
binddt f = binddt (map id ∘ f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G A, B: Type f: W * A -> G (T B)