{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} module HaskellWorks.Data.Vector.BoxedVectorLike ( BoxedVectorLike(..) ) where import qualified Data.Vector as DV import Data.Word import Foreign.Storable class BoxedVectorLike v e where bImap :: (Int -> a -> b) -> v a -> v b bMap :: (a -> b) -> v a -> v b bUnfoldr :: (Storable a) => (b -> Maybe (a, b)) -> b -> v a bUnfoldrN :: (Storable a) => Int -> (b -> Maybe (a, b)) -> b -> v a instance BoxedVectorLike DV.Vector Word8 where bImap = DV.imap {-# INLINABLE bImap #-} bMap = DV.map {-# INLINABLE bMap #-} bUnfoldr = DV.unfoldr {-# INLINABLE bUnfoldr #-} bUnfoldrN = DV.unfoldrN {-# INLINABLE bUnfoldrN #-} instance BoxedVectorLike DV.Vector Word16 where bImap = DV.imap {-# INLINABLE bImap #-} bMap = DV.map {-# INLINABLE bMap #-} bUnfoldr = DV.unfoldr {-# INLINABLE bUnfoldr #-} bUnfoldrN = DV.unfoldrN {-# INLINABLE bUnfoldrN #-} instance BoxedVectorLike DV.Vector Word32 where bImap = DV.imap {-# INLINABLE bImap #-} bMap = DV.map {-# INLINABLE bMap #-} bUnfoldr = DV.unfoldr {-# INLINABLE bUnfoldr #-} bUnfoldrN = DV.unfoldrN {-# INLINABLE bUnfoldrN #-} instance BoxedVectorLike DV.Vector Word64 where bImap = DV.imap {-# INLINABLE bImap #-} bMap = DV.map {-# INLINABLE bMap #-} bUnfoldr = DV.unfoldr {-# INLINABLE bUnfoldr #-} bUnfoldrN = DV.unfoldrN {-# INLINABLE bUnfoldrN #-}