{-# OPTIONS --without-K --safe #-} module Categories.Monad where open import Level open import Categories.Category using (Category) open import Categories.Functor using (Functor; Endofunctor; _∘F_) renaming (id to idF) open import Categories.NaturalTransformation renaming (id to idN) open import Categories.NaturalTransformation.NaturalIsomorphism hiding (_≃_) open import Categories.NaturalTransformation.Equivalence open NaturalIsomorphism record Monad {o ℓ e} (C : Category o ℓ e) : Set (o ⊔ ℓ ⊔ e) where field F : Endofunctor C η : NaturalTransformation idF F μ : NaturalTransformation (F ∘F F) F module F = Functor F module η = NaturalTransformation η module μ = NaturalTransformation μ open Category C open F field assoc : ∀ {X : Obj} → μ.η X ∘ F₁ (μ.η X) ≈ μ.η X ∘ μ.η (F₀ X) sym-assoc : ∀ {X : Obj} → μ.η X ∘ μ.η (F₀ X) ≈ μ.η X ∘ F₁ (μ.η X) identityˡ : ∀ {X : Obj} → μ.η X ∘ F₁ (η.η X) ≈ id identityʳ : ∀ {X : Obj} → μ.η X ∘ η.η (F₀ X) ≈ id module _ {o ℓ e} (C : Category o ℓ e) where open Monad open Category C hiding (id) id : Monad C id .F = idF id .η = idN id .μ = unitor² .F⇒G id .assoc = Equiv.refl id .sym-assoc = Equiv.refl id .identityˡ = identity² id .identityʳ = identity²