{-# OPTIONS --type-in-type #-}

module Category.SET where

open import Categories
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl)
open import Relation.Binary.Structures


open Category

SET : Category
Obj     SET         = Set
_~>_    SET S T     = S  T
_≈_     SET {A} f g = forall (a : A)  f a  g a
IsEquivalence.refl  (≈-equiv SET) _     = refl
IsEquivalence.sym   (≈-equiv SET) f a   = Eq.sym (f a)
IsEquivalence.trans (≈-equiv SET) f g a = Eq.trans (f a) (g a)
id      SET         = \a  a
_∘_     SET         = \g f a  g (f a)
∘-cong  SET {f' = f'} gg' ff' a rewrite ff' a | gg' (f' a) = refl
id-r    SET _ _     = refl
id-l    SET _ _     = refl
∘-assoc SET _ _ _ _ = refl