{-# LANGUAGE TypeFamilies, CPP #-} module NoSlow.Backend.Vector ( module Data.Vector, enumFromTo_Int, index, append, pair, from2, fst, snd, triple, from3 ) where import NoSlow.Util.Computation import qualified Data.Vector as V import Data.Vector instance DeepSeq a => DeepSeq (V.Vector a) where {-# INLINE deepSeq #-} deepSeq xs b = xs `seq` n `seq` go 0 where n = V.length xs go i | i < n = (xs V.! i) `deepSeq` go (i+1) | otherwise = b instance TestData a => TestData (V.Vector a) where testData = testList instance ListLike V.Vector a where fromList = V.fromList enumFromTo_Int :: Int -> Int -> V.Vector Int {-# INLINE enumFromTo_Int #-} enumFromTo_Int = V.enumFromTo index :: V.Vector a -> Int -> a {-# INLINE index #-} index = (V.!) append :: V.Vector a -> V.Vector a -> V.Vector a {-# INLINE append #-} append = (V.++) pair :: a -> b -> (a,b) {-# INLINE pair #-} pair = (,) from2 :: (a,b) -> (a,b) {-# INLINE from2 #-} from2 = id triple :: a -> b -> c -> (a,b,c) {-# INLINE triple #-} triple = (,,) from3 :: (a,b,c) -> (a,b,c) {-# INLINE from3 #-} from3 = id