module HaskellWorks.Data.Vector.VectorLike
( VectorLike(..)
, IndexedSeq(..)
, Seq(..)
) where
import qualified Data.ByteString as BS
import Data.Int
import qualified Data.Vector as DV
import qualified Data.Vector.Storable as DVS
import Data.Word
import HaskellWorks.Data.IndexedSeq
import HaskellWorks.Data.Snoc
class (IndexedSeq v, Snoc v) => VectorLike v where
vConcat :: [v] -> v
vFilter :: (Elem v -> Bool) -> v -> v
vGenerate :: Int -> (Int -> Elem v) -> v
instance VectorLike String where
vConcat = concat
vFilter = filter
vGenerate n f = f `fmap` [0 .. (n 1)]
instance VectorLike BS.ByteString where
vConcat = BS.concat
vFilter = BS.filter
vGenerate n f = fst (BS.unfoldrN n go 0)
where go i = if i /= n then Just (f i, i + 1) else Nothing
instance VectorLike (DV.Vector Word8) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DV.Vector Word16) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DV.Vector Word32) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DV.Vector Word64) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DVS.Vector Word8) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Word16) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Word32) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Word64) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DV.Vector Int8) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DV.Vector Int16) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DV.Vector Int32) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DV.Vector Int64) where
vConcat = DV.concat
vFilter = DV.filter
vGenerate = DV.generate
instance VectorLike (DVS.Vector Int8) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Int16) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Int32) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Int64) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate
instance VectorLike (DVS.Vector Int) where
vConcat = DVS.concat
vFilter = DVS.filter
vGenerate = DVS.generate