{-# OPTIONS --safe #-}

module Data.Vec.Sigma where

open import Prelude
open import Data.Unit.UniversePolymorphic renaming (⊤ to ⊤′)

Vec⁺ : Type a → ℕ → Type a
Vec⁺ A zero    = A
Vec⁺ A (suc n) = A × Vec⁺ A n

Vec : Type a → ℕ → Type a
Vec A 0       = ⊤′
Vec A (suc n) = Vec⁺ A n

private variable n : ℕ

open import Data.List using (List; _∷_; [])

toList⁺ : Vec⁺ A n → List A
toList⁺ {n = zero } x = x ∷ []
toList⁺ {n = suc n} (x , xs) = x ∷ toList⁺ xs

toList : Vec A n → List A
toList {n = zero } _ = []
toList {n = suc n} = toList⁺