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