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