{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} module HaskellWorks.Data.Filter ( Container(..) , Filter(..) ) where import Data.Int import Data.Word import HaskellWorks.Data.Container import qualified Data.ByteString as BS import qualified Data.List as L import qualified Data.Vector as DV import qualified Data.Vector.Storable as DVS -- | Class of values that support vector like operations class Container v => Filter v where filter :: (Elem v -> Bool) -> v -> v instance Filter String where filter = L.filter {-# INLINE filter #-} instance Filter BS.ByteString where filter = BS.filter {-# INLINE filter #-} instance Filter (DV.Vector Word8) where filter = DV.filter {-# INLINE filter #-} instance Filter (DV.Vector Word16) where filter = DV.filter {-# INLINE filter #-} instance Filter (DV.Vector Word32) where filter = DV.filter {-# INLINE filter #-} instance Filter (DV.Vector Word64) where filter = DV.filter {-# INLINE filter #-} instance Filter (DVS.Vector Word8) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Word16) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Word32) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Word64) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DV.Vector Int8) where filter = DV.filter {-# INLINE filter #-} instance Filter (DV.Vector Int16) where filter = DV.filter {-# INLINE filter #-} instance Filter (DV.Vector Int32) where filter = DV.filter {-# INLINE filter #-} instance Filter (DV.Vector Int64) where filter = DV.filter {-# INLINE filter #-} instance Filter (DVS.Vector Int8) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Int16) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Int32) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Int64) where filter = DVS.filter {-# INLINE filter #-} instance Filter (DVS.Vector Int) where filter = DVS.filter {-# INLINE filter #-}