{-# OPTIONS --without-K --safe #-} module Categories.Functor.Construction.Constant where open import Level open import Categories.Category open import Categories.Category.Instance.One open import Categories.Category.Product open import Categories.Functor renaming (id to idF) open import Categories.NaturalTransformation using (NaturalTransformation) import Categories.Morphism.Reasoning as MR private variable o ℓ e : Level C D : Category o ℓ e const : (d : Category.Obj D) → Functor C D const {D = D} d = record { F₀ = λ _ → d ; F₁ = λ _ → id ; identity = refl ; homomorphism = sym identity² ; F-resp-≈ = λ _ → refl } where open Category D open Equiv const! : (d : Category.Obj D) → Functor (One {0ℓ} {0ℓ} {0ℓ}) D const! = const constˡ : (c : Category.Obj C) → Functor D (Product C D) constˡ c = const c ※ idF constʳ : (c : Category.Obj C) → Functor D (Product D C) constʳ c = idF ※ (const c) constNat : ∀ {A B} → Category._⇒_ D A B → NaturalTransformation (const {D = D} {C = C} A) (const B) constNat {D = D} f = record { η = λ _ → f ; commute = λ _ → MR.id-comm D ; sym-commute = λ _ → MR.id-comm-sym D }