LawfulTraversable instances #
This file provides instances of LawfulTraversable for types from the core library: Option,
List and Sum.
theorem Option.comp_traverse {F G : Type u → Type u} [Applicative F] [Applicative G] [LawfulApplicative G] {α : Type u_1} {β γ : Type u} (f : β → F γ) (g : α → G β) (x : Option α) :
Option.traverse (Functor.Comp.mk ∘ (fun (x : G β) => f <$> x) ∘ g) x = Functor.Comp.mk (Option.traverse f <$> Option.traverse g x)
theorem Option.naturality {F G : Type u → Type u} [Applicative F] [Applicative G] [LawfulApplicative G] (η : ApplicativeTransformation F G) [LawfulApplicative F] {α : Type u_1} {β : Type u} (f : α → F β) (x : Option α) :
(fun {α : Type u} => η.app α) (Option.traverse f x) = Option.traverse ((fun {α : Type u} => η.app α) ∘ f) x
theorem List.comp_traverse {F G : Type u → Type u} [Applicative F] [Applicative G] [LawfulApplicative G] {α : Type u_1} {β γ : Type u} (f : β → F γ) (g : α → G β) (x : List α) :
List.traverse (Functor.Comp.mk ∘ (fun (x : G β) => f <$> x) ∘ g) x = Functor.Comp.mk (List.traverse f <$> List.traverse g x)
theorem List.naturality {F G : Type u → Type u} [Applicative F] [Applicative G] [LawfulApplicative G] [LawfulApplicative F] (η : ApplicativeTransformation F G) {α : Type u_1} {β : Type u} (f : α → F β) (x : List α) :
(fun {α : Type u} => η.app α) (List.traverse f x) = List.traverse ((fun {α : Type u} => η.app α) ∘ f) x
theorem Sum.traverse_map {σ : Type u} {G : Type u → Type u} [Applicative G] {α β γ : Type u} (g : α → β) (f : β → G γ) (x : σ ⊕ α) :
theorem Sum.comp_traverse {σ : Type u} {F G : Type u → Type u} [Applicative F] [Applicative G] [LawfulApplicative G] {α β γ : Type u} (f : β → F γ) (g : α → G β) (x : σ ⊕ α) :
Sum.traverse (Functor.Comp.mk ∘ (fun (x : G β) => f <$> x) ∘ g) x = Functor.Comp.mk (Sum.traverse f <$> Sum.traverse g x)
theorem Sum.map_traverse {σ : Type u} {G : Type u → Type u} [Applicative G] [LawfulApplicative G] {α : Type u_1} {β γ : Type u} (g : α → G β) (f : β → γ) (x : σ ⊕ α) :
theorem Sum.naturality {σ : Type u} {F G : Type u → Type u} [Applicative F] [Applicative G] [LawfulApplicative G] [LawfulApplicative F] (η : ApplicativeTransformation F G) {α : Type u_1} {β : Type u} (f : α → F β) (x : σ ⊕ α) :
(fun {α : Type u} => η.app α) (Sum.traverse f x) = Sum.traverse ((fun {α : Type u} => η.app α) ∘ f) x