{-# OPTIONS --without-K --two-level #-}

module 2LTT_C.Types.List where

open import 2LTT_C.Primitive

data List {l1 : Level} (A : UU l1) : UU l1  where
  [] : List A
  _::_ : A → List A → List A

infixr 5 _::_

ind-List : {l1 l2 : Level}(A : UU l1) (Y : List {l1} A → UU l2) →
                           Y ([]) → ((a : A) (l : List A) → Y (l) → Y (a :: l)) → ((l : (List A)) → Y l)
ind-List A Y d f [] = d
ind-List A Y d f (a :: l) = f a l (ind-List A Y d f l)

append : {i : Level} {A : UU i} → List A → List A → List A
append [] l'  =  l'
append (a :: l) l' = a :: (append l l')

embed-to-List : {i : Level} (A : UU i) → A → List A
embed-to-List A a = a :: []