module Chapter10.Ornament.Examples.List where open import Level renaming ( zero to zeroL ; suc to sucL ) open import Function open import Data.Unit open import Data.Nat open import Data.Fin hiding (lift) open import Data.Product open import Chapter2.Logic open import Chapter6.IDesc open import Chapter6.IDesc.Fixpoint open import Chapter6.IDesc.Examples.Nat open import Chapter10.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 , lift tt ⟩ cons : ∀{A} → A → List A → List A cons a xs = ⟨ suc zero , a , xs , lift tt ⟩