module Chapter2.IDesc.Examples.ToIDesc where

open import Data.Unit
open import Data.Nat
open import Data.Fin

open import Chapter2.Desc
open import Chapter2.IDesc

toIDesc : (D : Desc)  IDesc 
toIDesc `var = `var tt
toIDesc `1 = `1
toIDesc (D  D') = toIDesc D  toIDesc D'
toIDesc (D `+ D') =  2 λ { zero  toIDesc D 
                           ; (suc zero)  toIDesc D' 
                           ; (suc (suc ())) }
toIDesc ( S T) =  S λ s  toIDesc (T s) 
toIDesc ( S T) =  S λ s  toIDesc (T s)