module Chapter5.Ornament.Examples.Maybe where open import Function open import Data.Unit open import Data.Nat open import Data.Fin open import Data.Product open import Chapter2.IDesc open import Chapter2.IDesc.Fixpoint open import Chapter2.IDesc.Examples.Bool open import Chapter5.Ornament MaybeO : Set → orn BoolD id id MaybeO A = orn.mk (λ _ → `σ (λ { zero → insert A (λ _ → `1) ; (suc zero) → `1 ; (suc (suc ())) })) Maybe : Set → Set Maybe A = μ ⟦ MaybeO A ⟧orn tt just : ∀{A} → A → Maybe A just a = ⟨ zero , a , tt ⟩ nothing : ∀{A} → Maybe A nothing = ⟨ suc zero , tt ⟩