{-# OPTIONS --without-K --safe #-}

module Data.List.Sized.Interface where

open import Level.Bounded
open import Agda.Builtin.Nat renaming (Nat to )
open import Data.Product using (_,_)
open import Function.Base using (case_of_)
open import Relation.Unary

module _ {l} (A : Set≤ l) (As :   Set≤ l) where

 View :   Set l
 View zero    = Lift 
 View (suc n) = Lift (A × As n)

 record Sized : Set l where
   field view :  {n}  Lift (As n)  View n

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

instance

  vec :  {l} {A : Set≤ l}  Sized A (Vec A)
  Sized.view vec xs = case lower xs of λ where
    []        lift _
    (x  xs)  lift (x , xs)