{-# language GADTs, TypeOperators, DataKinds, KindSignatures #-}
module Data.Shape.Static where

import           GHC.TypeLits (Nat)

-- from https://hackage.haskell.org/package/dimensions-0.3.2.0/docs/src/Numeric-Dimensions-Idx.html#Idx
data Idx (ds :: [Nat]) where
   -- | Zero-rank dimensionality - scalar
   Zi :: Idx '[]
   -- | List-like concatenation of indices
   (:!) :: {-# UNPACK #-} !Int -> !(Idx ds) -> Idx (d ': ds)