hw-prim-0.6.2.4: src/HaskellWorks/Data/Vector/AsVector8.hs
{-# 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 #-}