{-# OPTIONS --without-K --safe #-} open import Prelude open import Categories.Category.Monoidal.BiClosed using (BiClosed) open import Relation.Binary.PropositionalEquality using (_≡_; refl; subst) open import Data.Product using (uncurry; uncurry′; Σ; _,_; _×_) open import Level using (_⊔_) open import Categories.Category.Instance.Setoids open import Categories.Category.Instance.Properties.Setoids.CCC open import Categories.Category.Cartesian using (Cartesian) open import Categories.Category.CartesianClosed using (module CartesianMonoidalClosed; CartesianClosed) open import Level using (0ℓ) module concrete-examples where open import fil-examples using (module example-1) C = Setoids 0ℓ 0ℓ open module C = Category C using (_∘_) CC = Setoids-CCC 0ℓ open module CC = CartesianClosed CC using (cartesian) open Cartesian cartesian using (products) open BinaryProducts products using (π₁) MC = CartesianMonoidalClosed.closedMonoidal C CC open CartesianClosed CC public open import Relation.Binary.PropositionalEquality.Core as ≡ using (_≡_) import Relation.Binary.PropositionalEquality.Properties as ≡ open import Data.Nat using (ℕ;_+_) ℕₛ = ≡.setoid ℕ open example-1 MC {A = ℕₛ} open import Data.Product.Relation.Binary.Pointwise.NonDependent using (_×ₛ_) open import Data.Product.Function.NonDependent.Setoid using (<_,_>ₛ) open import Function.Construct.Setoid using (setoid) open import Function.Bundles using (_⟶_; Func;mk⟶ ) open Func using (to) ϕ' : (X Y : C.Obj) → Func ((Reader₀ X) ×ₛ (CoReader₀ Y)) X ϕ' X Y = π₁ ∘ ϕ X Y open import Relation.Binary.Bundles using (Setoid) open Setoid using (Carrier) ex : ℕ → ℕ ex k = ϕ' ℕₛ ℕₛ .to (mk⟶ (λ n → 18 + n) , (2 , k)) _ : ∀ {k} → ex k ≡ 20 _ = refl