{-# OPTIONS --safe #-}
module Data.SnocList where
open import Prelude hiding ([_])
import Data.List as L
open import Data.List
using ([]) public
open import Data.NonEmpty
using (List⁺; not-empty)
renaming (tail to init; head to last)
public
import Data.NonEmpty as NEL
infixl 5 _∹_
pattern _∹_ xs x = x L.∷ xs
pattern _∹_ xs x = x NEL.∷ xs
infixl 5 _∹′_
_∹′_ : List⁺ A → A → List⁺ A
(xs ∹′ x) .init = not-empty xs
(xs ∹′ x) .last = x
open import Data.List.Syntax using (VecT)
import Data.List.Syntax
[_] : ∀ {n} → VecT n A → List⁺ A
[_] {n = zero} x = [] ∹ x
[_] {n = suc n} (x , xs) = foldl _∹′_ ([] ∹ x) (Data.List.Syntax.[ xs ])
_ : [ 1 , 2 , 3 ] ≡ [] ∹ 1 ∹ 2 ∹ 3
_ = refl