diff --git a/library/PrimitiveExtras/Unfold.hs b/library/PrimitiveExtras/Unfold.hs
--- a/library/PrimitiveExtras/Unfold.hs
+++ b/library/PrimitiveExtras/Unfold.hs
@@ -6,7 +6,11 @@
 import DeferredFolds.Unfold
 import qualified PrimitiveExtras.Fold as A
 import qualified PrimitiveExtras.UnliftedArray as B
+import qualified PrimitiveExtras.UnfoldM as C
 
+
+primMultiArrayAssocs :: Prim a => PrimMultiArray a -> Unfold (Int, a)
+primMultiArrayAssocs = unfoldM . C.primMultiArrayAssocs
 
 primMultiArrayIndices :: PrimMultiArray a -> Unfold Int
 primMultiArrayIndices (PrimMultiArray ua) =
diff --git a/library/PrimitiveExtras/UnfoldM.hs b/library/PrimitiveExtras/UnfoldM.hs
--- a/library/PrimitiveExtras/UnfoldM.hs
+++ b/library/PrimitiveExtras/UnfoldM.hs
@@ -8,6 +8,13 @@
 import qualified PrimitiveExtras.UnliftedArray as B
 
 
+primMultiArrayAssocs :: (Monad m, Prim a) => PrimMultiArray a -> UnfoldM m (Int, a)
+primMultiArrayAssocs pma =
+  do
+    index <- primMultiArrayIndices pma
+    element <- primMultiArrayAt pma index
+    return (index, element)
+
 primMultiArrayIndices :: Monad m => PrimMultiArray a -> UnfoldM m Int
 primMultiArrayIndices (PrimMultiArray ua) =
   intsInRange 0 (pred (sizeofUnliftedArray ua))
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.8
+  0.1.9
 category:
   Primitive
 synopsis:
