module Chapter8.Ornament.Examples.Maybe 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 Chapter5.IDesc open import Chapter5.IDesc.Fixpoint open import Chapter5.IDesc.Examples.Bool open import Chapter8.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 , lift tt ⟩ nothing : ∀{A} → Maybe A nothing = ⟨ suc zero , lift tt ⟩