{-# LANGUAGE KindSignatures, DataKinds, TypeFamilyDependencies, MagicHash #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Numeric.Vector.Family
-- Copyright   :  (c) Artem Chirkin
-- License     :  MIT
--
-- Maintainer  :  chirkin@arch.ethz.ch
--
--
-----------------------------------------------------------------------------

module Numeric.Vector.Family
  ( Vector
  , VFloatX2 (..), VFloatXN (..)
  ) where

import GHC.TypeLits
import GHC.Prim


-- | Family of all vector types, specialized on low-dimensional vectors
type family Vector t (n :: Nat) = v | v -> t n where
  Vector Float 2 = VFloatX2
  Vector Float n = VFloatXN n


-- | 2D Float vector
data VFloatX2 = VFloatX2 Float# Float#

-- | ND vector
data VFloatXN (n::Nat) = VFloatXN ByteArray#