module Chapter2.Desc.Examples.List where

open import Data.Unit
open import Data.Product
open import Data.Fin

open import Relation.Binary.PropositionalEquality

open import Chapter2.Desc
open import Chapter2.Desc.Fixpoint

ListD : Set  Desc 
ListD A =  (Fin 2) 
              { zero  `1 
                ; (suc zero)   A λ _  `var  `1 
                ; (suc (suc ())) })

List : Set  Set 
List A = μ (ListD A)

nil : ∀{A}  List A
nil =  zero , tt  

cons : ∀{A}  A  List A  List A
cons a xs =  suc zero , a , xs , tt 


open import Chapter2.Desc.Lifting

module TestLifting {A : Set}(P : List A  Set) where

  test-lifting-nil : [ ListD A ]^ P (zero , tt)  
  test-lifting-nil = refl

  test-lifting-cons : ∀{a xs}  [ ListD A ]^ P (suc zero , a , xs , tt)  Σ (P xs) λ _  
  test-lifting-cons = refl