diff --git a/library/PrimitiveExtras/IO.hs b/library/PrimitiveExtras/IO.hs
--- a/library/PrimitiveExtras/IO.hs
+++ b/library/PrimitiveExtras/IO.hs
@@ -86,36 +86,6 @@
         else return ()
       in iterate from
 
-traversePrimArrayWithIndexConcurrently ::
-  Prim a =>
-  PrimArray a ->
-  Int ->
-  (Int -> a -> IO ()) ->
-  IO (IO ()) {-^ An action, which blocks until the concurrent computation is finished. -}
-traversePrimArrayWithIndexConcurrently primArray threadsAmount action =
-  let size = sizeofPrimArray primArray
-      maxIndex = pred size
-      step = div size threadsAmount
-      in case step of
-        0 -> itraversePrimArray_ action primArray $> return ()
-        _ -> do
-          semaphore <- newTVarIO threadsAmount
-          let
-            startThreads index = if index >= size
-              then return ()
-              else let
-                !nextIndex = step + index
-                in do
-                  forkIO $ do
-                    traversePrimArrayWithIndexInRange primArray index (min nextIndex size) action
-                    atomically (modifyTVar' semaphore pred)
-                  startThreads nextIndex
-            in do
-              startThreads 0
-              return $ atomically $ do
-                activeThreads <- readTVar semaphore
-                guard (activeThreads == 0)
-
 -- * TVarArray
 -------------------------
 
diff --git a/library/PrimitiveExtras/Pure.hs b/library/PrimitiveExtras/Pure.hs
--- a/library/PrimitiveExtras/Pure.hs
+++ b/library/PrimitiveExtras/Pure.hs
@@ -3,7 +3,8 @@
 
 import PrimitiveExtras.Prelude
 import PrimitiveExtras.Types
-import qualified PrimitiveExtras.UnliftedArray as A
+import qualified Data.Vector.Unboxed as A
+import qualified Data.Vector.Primitive as B
 
 
 {-| Get length of the outer dimension of a primitive multi array -}
@@ -16,3 +17,15 @@
     marr <- newPrimArray size
     writePrimArray marr index value
     unsafeFreezePrimArray marr
+
+primArrayByteArray :: PrimArray a -> ByteArray
+primArrayByteArray (PrimArray unliftedByteArray) =
+  ByteArray unliftedByteArray
+
+primArrayPrimitiveVector :: Prim a => PrimArray a -> B.Vector a
+primArrayPrimitiveVector primArray =
+  B.Vector 0 (sizeofPrimArray primArray) (primArrayByteArray primArray)
+
+primArrayUnboxedVector :: Prim a => PrimArray a -> A.Vector a
+primArrayUnboxedVector primArray =
+  unsafeCoerce (primArrayPrimitiveVector primArray)
diff --git a/primitive-extras.cabal b/primitive-extras.cabal
--- a/primitive-extras.cabal
+++ b/primitive-extras.cabal
@@ -1,7 +1,7 @@
 name:
   primitive-extras
 version:
-  0.2
+  0.3
 category:
   Primitive
 synopsis:
@@ -59,4 +59,5 @@
     deferred-folds >=0.6 && <0.7,
     foldl >=1 && <2,
     primitive >=0.6.4 && <0.7,
-    profunctors >=5 && <6
+    profunctors >=5 && <6,
+    vector >=0.12 && <0.13
