module Chapter5.Ornament.Examples.List where open import Function open import Data.Unit open import Data.Nat open import Data.Fin open import Data.Product open import Chapter1.Logic open import Chapter2.IDesc open import Chapter2.IDesc.Fixpoint open import Chapter2.IDesc.Examples.Nat open import Chapter5.Ornament ListO : Set → orn NatD id id ListO A = orn.mk λ _ → `σ (λ { zero → `1 ; (suc zero) → insert A (λ _ → `var (inv tt) `× `1) ; (suc (suc ())) }) List : Set → Set List A = μ ⟦ ListO A ⟧orn tt nil : ∀{A} → List A nil = ⟨ zero , tt ⟩ cons : ∀{A} → A → List A → List A cons a xs = ⟨ suc zero , a , xs , tt ⟩