{-# 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⁺