{-# OPTIONS --without-K #-}
open import Level.NP using (_⊔_)
open import Type hiding (★)
open import Function.NP using (Endo)
open import Data.Nat using (ℕ; zero; suc)
module FunUniverse.Category {t ℓ} {T : ★ t} (_`→_ : T → T → ★ ℓ) where
module CompositionNotations
(_∘_ : ∀ {A B C} → (B `→ C) → (A `→ B) → (A `→ C))
{A B C} where
infixr 1 _⁏_
infixr 1 _>>>_
_⁏_ : (A `→ B) → (B `→ C) → (A `→ C)
f ⁏ g = g ∘ f
_<<<_ : (B `→ C) → (A `→ B) → (A `→ C)
g <<< f = g ∘ f
_>>>_ : (A `→ B) → (B `→ C) → (A `→ C)
f >>> g = f ⁏ g
record Category : ★ (ℓ ⊔ t) where
constructor _,_
infixr 9 _∘_
field
id : ∀ {A} → A `→ A
_∘_ : ∀ {A B C} → (B `→ C) → (A `→ B) → (A `→ C)
private
`Endo : T → Set ℓ
`Endo A = A `→ A
iterate : ∀ {A} → ℕ → Endo (`Endo A)
iterate zero _ = id
iterate (suc n) f = iterate n f ∘ f