diff --git a/hw-prim.cabal b/hw-prim.cabal
--- a/hw-prim.cabal
+++ b/hw-prim.cabal
@@ -1,5 +1,5 @@
 name:                   hw-prim
-version:                0.0.3.2
+version:                0.0.3.3
 synopsis:               Primitive functions and data types
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-prim#readme
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
@@ -1,9 +1,32 @@
+{-# LANGUAGE FlexibleInstances #-}
+
 module HaskellWorks.Data.FromForeignRegion where
 
+import qualified Data.ByteString          as BS
+import qualified Data.ByteString.Internal as BSI
+import qualified Data.Vector.Storable     as DVS
 import           Data.Word
 import           Foreign.ForeignPtr
+import           HaskellWorks.Data.FromByteString
 
+type ForeignRegion = (ForeignPtr Word8, Int, Int)
+
 -- | Class for datastructures that can be created from a foreign region
 class FromForeignRegion a where
   -- | Create a value of type @a from a foreign region.
-  fromForeignRegion :: (ForeignPtr Word8, Int, Int) -> a
+  fromForeignRegion :: ForeignRegion -> a
+
+instance FromForeignRegion BS.ByteString where
+  fromForeignRegion (fptr, offset, size) = BSI.fromForeignPtr (castForeignPtr fptr) offset size
+
+instance FromForeignRegion (DVS.Vector Word8) where
+  fromForeignRegion = fromByteString . fromForeignRegion
+
+instance FromForeignRegion (DVS.Vector Word16) where
+  fromForeignRegion = fromByteString . fromForeignRegion
+
+instance FromForeignRegion (DVS.Vector Word32) where
+  fromForeignRegion = fromByteString . fromForeignRegion
+
+instance FromForeignRegion (DVS.Vector Word64) where
+  fromForeignRegion = fromByteString . fromForeignRegion
