{-# OPTIONS --safe --without-K #-}

module Canon.Pair where

open import Data.Product
open import Data.Vec

open import Core
open import Signature
open import Canon

open import Level as L

module PairCanon where

  data TPairShape : Set where pair : TPairShape
  TPairΣ = TPairShape  λ where pair  2

  pair′ :  TPairΣ  σ   (s t : μ σ)  μ σ
  pair′ s t = inject (pair , L.lift (s  t  []))

  open Algebra

  PairVal : Algebra TPairΣ Set Set
  alg PairVal (pair , L.lift (Vs  Vt  [])) = Vs × Vt 

  pairCanon : Canon
  Canon.ty  pairCanon = TPairΣ
  Canon.val pairCanon = PairVal

open PairCanon public