{-# LANGUAGE Haskell2010
    , TypeFamilies
    , FlexibleContexts
    , Trustworthy
    , StandaloneDeriving
    , DeriveDataTypeable
    , CPP
 #-}
{-# OPTIONS -Wall -fno-warn-name-shadowing #-}
module Numeric.Vector (
    Vector
) where
import Data.Ratio
import Data.Complex
import Data.Int
import Data.Array.IArray
import Data.Array.Unboxed
import Data.Typeable
import qualified Data.Array.Unsafe as U
data family Vector e
#if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 707)
deriving instance Typeable Vector
#else
deriving instance Typeable1 Vector
#endif
data instance Vector Int
    = IntVector !Int (UArray Int Int)
data instance Vector Float
    = FloatVector !Int (UArray Int Float)
data instance Vector Double
    = DoubleVector !Int (UArray Int Double)
data instance Vector Integer
    = IntegerVector !Int (Array Int Integer)
data instance Vector (Ratio a)
    = RatioVector !Int (Array Int (Ratio a))
data instance Vector (Complex a)
    = ComplexVector !Int (Array Int (Complex a))
dotProd = undefined
vectorProd = undefined