{-# OPTIONS --without-K --safe #-} module Cats.Trans where open import Level using (_⊔_) open import Cats.Category.Base open import Cats.Functor using (Functor) open Functor module _ {lo la l≈ lo′ la′ l≈′} {C : Category lo la l≈} {D : Category lo′ la′ l≈′} where infixr 9 _∘_ private module C = Category C module D = Category D open D.≈-Reasoning record Trans (F G : Functor C D) : Set (lo ⊔ la ⊔ la′ ⊔ l≈′) where field component : (c : C.Obj) → fobj F c D.⇒ fobj G c natural : ∀ {c d} {f : c C.⇒ d} → component d D.∘ fmap F f D.≈ fmap G f D.∘ component c open Trans public id : ∀ {F} → Trans F F id {F} = record { component = λ _ → D.id ; natural = D.≈.trans D.id-l (D.≈.sym D.id-r) } _∘_ : ∀ {F G H} → Trans G H → Trans F G → Trans F H _∘_ {F} {G} {H} θ ι = record { component = λ c → component θ c D.∘ component ι c ; natural = λ {c} {d} {f} → begin (component θ d D.∘ component ι d) D.∘ fmap F f ≈⟨ D.assoc ⟩ component θ d D.∘ component ι d D.∘ fmap F f ≈⟨ D.∘-resp-r (natural ι) ⟩ component θ d D.∘ fmap G f D.∘ component ι c ≈⟨ D.unassoc ⟩ (component θ d D.∘ fmap G f) D.∘ component ι c ≈⟨ D.∘-resp-l (natural θ) ⟩ (fmap H f D.∘ component θ c) D.∘ component ι c ≈⟨ D.assoc ⟩ fmap H f D.∘ component θ c D.∘ component ι c ∎ }