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