{-# OPTIONS --cubical --no-import-sorts --safe #-} module Cubical.Data.List.Base where open import Agda.Builtin.List public open import Cubical.Core.Everything open import Cubical.Data.Maybe open import Cubical.Data.Nat module _ {} {A : Type } where infixr 5 _++_ infixl 5 _∷ʳ_ [_] : A List A [ a ] = a [] _++_ : List A List A List A [] ++ ys = ys (x xs) ++ ys = x xs ++ ys rev : List A List A rev [] = [] rev (x xs) = rev xs ++ [ x ] _∷ʳ_ : List A A List A xs ∷ʳ x = xs ++ x [] length : List A length [] = 0 length (x l) = 1 + length l map : {ℓ'} {B : Type ℓ'} (A B) List A List B map f [] = [] map f (x xs) = f x map f xs map2 : {ℓ' ℓ''} {B : Type ℓ'} {C : Type ℓ''} (A B C) List A List B List C map2 f [] _ = [] map2 f _ [] = [] map2 f (x xs) (y ys) = f x y map2 f xs ys foldr : {ℓ'} {B : Type ℓ'} (A B B) B List A B foldr f b [] = b foldr f b (x xs) = f x (foldr f b xs) foldl : {ℓ'} {B : Type ℓ'} (B A B) B List A B foldl f b [] = b foldl f b (x xs) = foldl f (f b x) xs