{-# OPTIONS --without-K --safe #-} module Cats.Category.Fun where open import Cats.Trans public using (Trans ; component ; natural ; id ; _∘_) open import Relation.Binary using (Rel ; IsEquivalence ; _Preserves₂_⟶_⟶_) open import Level open import Cats.Category.Base open import Cats.Functor using (Functor) module Build {lo la l≈ lo′ la′ l≈′} (C : Category lo la l≈) (D : Category lo′ la′ l≈′) where infixr 4 _≈_ infixr -1 _↝_ private module C = Category C module D = Category D open D.≈ open D.≈-Reasoning Obj : Set (lo ⊔ la ⊔ l≈ ⊔ lo′ ⊔ la′ ⊔ l≈′) Obj = Functor C D _⇒_ : Obj → Obj → Set (lo ⊔ la ⊔ la′ ⊔ l≈′) _⇒_ = Trans record _≈_ {F G} (θ ι : F ⇒ G) : Set (lo ⊔ l≈′) where constructor ≈-intro field ≈-elim : ∀ {c} → component θ c D.≈ component ι c open _≈_ public equiv : ∀ {F G} → IsEquivalence (_≈_ {F} {G}) equiv = record { refl = ≈-intro refl ; sym = λ eq → ≈-intro (sym (≈-elim eq)) ; trans = λ eq₁ eq₂ → ≈-intro (trans (≈-elim eq₁) (≈-elim eq₂)) } Fun : Category (lo ⊔ la ⊔ l≈ ⊔ lo′ ⊔ la′ ⊔ l≈′) (lo ⊔ la ⊔ la′ ⊔ l≈′) (lo ⊔ l≈′) Fun = record { Obj = Obj ; _⇒_ = _⇒_ ; _≈_ = _≈_ ; id = id ; _∘_ = _∘_ ; equiv = equiv ; ∘-resp = λ θ≈θ′ ι≈ι′ → ≈-intro (D.∘-resp (≈-elim θ≈θ′) (≈-elim ι≈ι′)) ; id-r = ≈-intro D.id-r ; id-l = ≈-intro D.id-l ; assoc = ≈-intro D.assoc } _↝_ = Fun open Build public using (Fun ; _↝_) open module Build′ {lo la l≈ lo′ la′ l≈′} {C : Category lo la l≈} {D : Category lo′ la′ l≈′} = Build C D public hiding (Fun ; _↝_)