diff --git a/hw-prim.cabal b/hw-prim.cabal
--- a/hw-prim.cabal
+++ b/hw-prim.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hw-prim
-version:        0.6.2.3
+version:        0.6.2.4
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -73,6 +73,7 @@
       HaskellWorks.Data.Unsign
       HaskellWorks.Data.Vector.AsVector64
       HaskellWorks.Data.Vector.AsVector64s
+      HaskellWorks.Data.Vector.AsVector8
       HaskellWorks.Data.Vector.BoxedVectorLike
       HaskellWorks.Data.Vector.StorableVectorLike
   other-modules:
@@ -121,9 +122,9 @@
     , mmap            >= 0.5        && < 0.6
     , vector          >= 0.12       && < 0.13
     , transformers    >= 0.4        && < 0.6
-    , criterion >= 1.2 && < 1.5
+    , criterion     >= 1.2      && < 1.6
     , hw-prim
-    , mmap >= 0.5 && < 0.6
+    , mmap          >= 0.5      && < 0.6
   if flag(bounds-checking-enabled)
     cpp-options: -DBOUNDS_CHECKING_ENABLED
   default-language: Haskell2010
diff --git a/src/HaskellWorks/Data/ByteString.hs b/src/HaskellWorks/Data/ByteString.hs
--- a/src/HaskellWorks/Data/ByteString.hs
+++ b/src/HaskellWorks/Data/ByteString.hs
@@ -16,6 +16,7 @@
 
 instance ToByteString BS.ByteString where
   toByteString = id
+  {-# INLINE toByteString #-}
 
 instance ToByteString (DVS.Vector Word8) where
   toByteString v = case DVS.unsafeToForeignPtr v of
@@ -43,3 +44,4 @@
   then []
   else case BS.splitAt n bs of
     (as, zs) -> as : chunkedBy n zs
+{-# INLINE chunkedBy #-}
diff --git a/src/HaskellWorks/Data/FromByteString.hs b/src/HaskellWorks/Data/FromByteString.hs
--- a/src/HaskellWorks/Data/FromByteString.hs
+++ b/src/HaskellWorks/Data/FromByteString.hs
@@ -26,6 +26,7 @@
           gen cs = case BS.uncons cs of
             Just (d, ds) -> Just (d, ds)
             Nothing      -> Nothing
+  {-# INLINE fromByteString #-}
 
 instance FromByteString (DVS.Vector Word16) where
   fromByteString :: BS.ByteString -> DVS.Vector Word16
@@ -40,6 +41,7 @@
             | otherwise = case BS.uncons cs of
                 Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds
                 Nothing      -> Just (w, cs)
+  {-# INLINE fromByteString #-}
 
 instance FromByteString (DVS.Vector Word32) where
   fromByteString :: BS.ByteString -> DVS.Vector Word32
@@ -54,6 +56,7 @@
             | otherwise = case BS.uncons cs of
                 Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds
                 Nothing      -> Just (w, cs)
+  {-# INLINE fromByteString #-}
 
 instance FromByteString (DVS.Vector Word64) where
   fromByteString :: BS.ByteString -> DVS.Vector Word64
@@ -68,7 +71,9 @@
             | otherwise = case BS.uncons cs of
                 Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds
                 Nothing      -> Just (w, cs)
+  {-# INLINE fromByteString #-}
 
 instance FromByteString (DVSM.MVector s Word8) where
   fromByteString bs = case BS.toForeignPtr bs of
     (fptr, off, len) -> DVSM.unsafeFromForeignPtr (castForeignPtr fptr) off len
+  {-# INLINE fromByteString #-}
diff --git a/src/HaskellWorks/Data/FromForeignRegion.hs b/src/HaskellWorks/Data/FromForeignRegion.hs
--- a/src/HaskellWorks/Data/FromForeignRegion.hs
+++ b/src/HaskellWorks/Data/FromForeignRegion.hs
@@ -26,26 +26,33 @@
 
 instance FromForeignRegion BS.ByteString where
   fromForeignRegion (fptr, offset, size) = BSI.fromForeignPtr (castForeignPtr fptr) offset size
+  {-# INLINE fromForeignRegion #-}
 
 instance FromForeignRegion (DVS.Vector Word8) where
   fromForeignRegion (fptr, offset, size) = DVS.unsafeFromForeignPtr (castForeignPtr fptr) offset size
+  {-# INLINE fromForeignRegion #-}
 
 instance FromForeignRegion (DVS.Vector Word16) where
   fromForeignRegion (fptr, offset, size) = DVS.unsafeFromForeignPtr (castForeignPtr fptr) offset ((size + 1) `div` 2)
+  {-# INLINE fromForeignRegion #-}
 
 instance FromForeignRegion (DVS.Vector Word32) where
   fromForeignRegion (fptr, offset, size) = DVS.unsafeFromForeignPtr (castForeignPtr fptr) offset ((size + 3) `div` 4)
+  {-# INLINE fromForeignRegion #-}
 
 instance FromForeignRegion (DVS.Vector Word64) where
   fromForeignRegion (fptr, offset, size) = DVS.unsafeFromForeignPtr (castForeignPtr fptr) offset ((size + 7) `div` 8)
+  {-# INLINE fromForeignRegion #-}
 
 instance  ( FromForeignRegion a
           , FromForeignRegion b
           ) => FromForeignRegion (a :*: b) where
   fromForeignRegion r = fromForeignRegion r :*: fromForeignRegion r
+  {-# INLINE fromForeignRegion #-}
 
 mmapFromForeignRegion :: FromForeignRegion a => FilePath -> IO a
 mmapFromForeignRegion filePath = do
   region <- IO.mmapFileForeignPtr filePath IO.ReadOnly Nothing
   let !bs = fromForeignRegion region
   return bs
+{-# INLINE mmapFromForeignRegion #-}
diff --git a/src/HaskellWorks/Data/Vector/AsVector64.hs b/src/HaskellWorks/Data/Vector/AsVector64.hs
--- a/src/HaskellWorks/Data/Vector/AsVector64.hs
+++ b/src/HaskellWorks/Data/Vector/AsVector64.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE FlexibleInstances #-}
+
 module HaskellWorks.Data.Vector.AsVector64
   ( AsVector64(..)
   ) where
@@ -14,6 +15,7 @@
 
 instance AsVector64 (DVS.Vector Word64) where
   asVector64 = id
+  {-# INLINE asVector64 #-}
 
 instance AsVector64 BS.ByteString where
   asVector64 bs = DVS.constructN ((BS.length bs + 7) `div` 8) go
@@ -52,4 +54,4 @@
                         (w5 `shiftL` 40) .|.
                         (w6 `shiftL` 48) .|.
                         (w7 `shiftL` 56)
-
+  {-# INLINE asVector64 #-}
diff --git a/src/HaskellWorks/Data/Vector/AsVector8.hs b/src/HaskellWorks/Data/Vector/AsVector8.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/Vector/AsVector8.hs
@@ -0,0 +1,35 @@
+{-# 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 #-}
