module Chapter6.Functions.Examples.Plus where
open import Data.Unit
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 ()) , _ ⟩