module Chapter6.Functions.Examples.Plus where

open import Data.Unit
--open import Data.Nat hiding (_+_)
open import Data.Fin hiding (_+_)
open import Data.Product

open import Chapter2.IDesc
open import Chapter2.IDesc.Fixpoint
open import Chapter2.IDesc.Examples.Nat hiding (ze ; su)

open import Chapter6.Functions

type+ : Type
type+ = μ NatD [ tt ]→ μ NatD [ tt ]→ μ NatD [ tt  `⊤

infix 40 _+_ 

pattern ze = ⟨ zero , tt ⟩
pattern su n = ⟨ suc zero , n , tt ⟩ 

_+_ :  type+ ⟧Type
m + ze = m , tt
m + su n = su (proj₁ (m + n)) , tt 
m +  suc (suc ()) , _