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)