diff --git a/library/PrimitiveExtras/UnfoldM.hs b/library/PrimitiveExtras/UnfoldM.hs
new file mode 100644
--- /dev/null
+++ b/library/PrimitiveExtras/UnfoldM.hs
@@ -0,0 +1,20 @@
+module PrimitiveExtras.UnfoldM
+where
+
+import PrimitiveExtras.Prelude hiding (fold)
+import PrimitiveExtras.Types
+import DeferredFolds.UnfoldM
+import qualified PrimitiveExtras.Fold as A
+import qualified PrimitiveExtras.UnliftedArray as B
+
+
+primMultiArrayIndices :: Monad m => PrimMultiArray a -> UnfoldM m Int
+primMultiArrayIndices (PrimMultiArray ua) =
+  intsInRange 0 (pred (sizeofUnliftedArray ua))
+
+primMultiArrayAt :: (Monad m, Prim prim) => PrimMultiArray prim -> Int -> UnfoldM m prim
+primMultiArrayAt (PrimMultiArray ua) index =
+  B.at ua index empty primArray
+
+primArray :: (Monad m, Prim prim) => PrimArray prim -> UnfoldM m prim
+primArray ba = UnfoldM $ \f z -> foldlPrimArrayM' f z ba
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.1.1
+  0.1.2
 category:
   Primitive
 synopsis:
@@ -43,6 +43,7 @@
     PrimitiveExtras.Monad
     PrimitiveExtras.IO
     PrimitiveExtras.Unfold
+    PrimitiveExtras.UnfoldM
     PrimitiveExtras.Fold
     PrimitiveExtras.Pure
   other-modules:
