{-# LANGUAGE FlexibleInstances #-} module HaskellWorks.Data.Vector.AsVector8 ( AsVector8(..) ) where import Data.Word import qualified Data.ByteString as BS import qualified Data.ByteString.Internal as BSI import qualified Data.Vector.Storable as DVS class AsVector8 a where asVector8 :: a -> DVS.Vector Word8 instance AsVector8 (DVS.Vector Word8) where asVector8 = id {-# INLINE asVector8 #-} instance AsVector8 (DVS.Vector Word16) where asVector8 = DVS.unsafeCast {-# INLINE asVector8 #-} instance AsVector8 (DVS.Vector Word32) where asVector8 = DVS.unsafeCast {-# INLINE asVector8 #-} instance AsVector8 (DVS.Vector Word64) where asVector8 = DVS.unsafeCast {-# INLINE asVector8 #-} instance AsVector8 BS.ByteString where asVector8 bs = case BSI.toForeignPtr bs of (fptr, start, offset) -> DVS.unsafeFromForeignPtr fptr start offset {-# INLINE asVector8 #-}