module Chapter3.EnumU where

open import Data.Unit
open import Data.Nat
open import Data.Fin
open import Data.Product
open import Data.String

open import Chapter2.Desc
open import Chapter2.Desc.Fixpoint

UId = String

EnumUD : Desc
EnumUD =  (Fin 2) λ { zero  `1 
                      ; (suc zero)   UId λ _  `var  `1 
                      ; (suc (suc ())) }

EnumU : Set
EnumU = μ EnumUD

nilE : EnumU
nilE =  zero , tt 

consE : UId  EnumU  EnumU
consE t e =  suc zero , t , e , tt 

data EnumT : EnumU  Set where
  ze : ∀{t e}  EnumT (consE t e)
  su : ∀{t e}  EnumT e  EnumT (consE t e)