{-# OPTIONS --without-K --safe #-}
module Data.DifferenceList.Base where
open import Data.List.Base as List using (List)
open import Data.Nat.Base using (ℕ)
open import Function using (_∘′_; id)
open import Level using (Level)
private
variable
a b : Level
A : Set a
B : Set b
DiffList : Set a → Set a
DiffList A = List A → List A
infixr 5 _∷_ _++_
[] : DiffList A
[] = id
[_] : A → DiffList A
[ x ] = x List.∷_
_++_ : DiffList A → DiffList A → DiffList A
_++_ = _∘′_
_∷_ : A → DiffList A → DiffList A
x ∷ xs = [ x ] ++ xs
infixl 6 _∷ʳ_
_∷ʳ_ : DiffList A → A → DiffList A
xs ∷ʳ x = xs ++ [ x ]
toList : DiffList A → List A
toList xs = xs List.[]
fromList : List A → DiffList A
fromList = List._++_
viaList : (List A → List B) → (DiffList A → DiffList B)
viaList f = fromList ∘′ f ∘′ toList
map : (A → B) → DiffList A → DiffList B
map = viaList ∘′ List.map
concat : DiffList (DiffList A) → DiffList A
concat = List.foldr _++_ [] ∘′ toList
lift : DiffList A → DiffList A → DiffList A
lift = _++_
{-# WARNING_ON_USAGE lift
"Warning: lift was deprecated in v3.0.
Please use _++_ instead."
#-}
take : ℕ → DiffList A → DiffList A
take n = List.take n ++_
{-# WARNING_ON_USAGE take
"Warning: take was deprecated in v3.0 as it is not the
lawful counterpart of List.take"
#-}
drop : ℕ → DiffList A → DiffList A
drop n = List.drop n ++_
{-# WARNING_ON_USAGE drop
"Warning: drop was deprecated in v3.0 as it is not the
lawful counterpart of List.drop"
#-}