diff --git a/edges.cabal b/edges.cabal
--- a/edges.cabal
+++ b/edges.cabal
@@ -1,5 +1,5 @@
 name: edges
-version: 0.11.0.1
+version: 0.11.0.2
 category: Graphs
 synopsis: Tools for efficient immutable graphs
 description: A set of tools for constructing immutable graphs which are both memory and performance-efficient.
@@ -42,7 +42,7 @@
     contravariant >=1.4 && <2,
     data-dword >=0.3.1.2 && <0.4,
     deepseq >=1.4 && <2,
-    deferred-folds >=0.6.12 && <0.7,
+    deferred-folds >=0.8 && <0.9,
     foldl >=1.4.2 && <2,
     hashable >=1.2 && <2,
     monad-par >=0.3.4.8 && <0.4,
@@ -50,7 +50,7 @@
     potoki >=2.0.2 && <2.1,
     potoki-cereal >=0.3 && <0.4,
     primitive >=0.6.4 && <0.7,
-    primitive-extras >=0.6.4.1 && <0.7,
+    primitive-extras >=0.7 && <0.8,
     profunctors >=5 && <6,
     QuickCheck >=2.8.1 && <3,
     semigroupoids >=5.2 && <6,
diff --git a/library/Edges/Functions.hs b/library/Edges/Functions.hs
--- a/library/Edges/Functions.hs
+++ b/library/Edges/Functions.hs
@@ -4,8 +4,8 @@
 import Edges.Prelude
 import Edges.Types
 import qualified Data.Vector.Unboxed as UnboxedVector
-import qualified DeferredFolds.Unfold as Unfold
-import qualified DeferredFolds.UnfoldM as UnfoldM
+import qualified DeferredFolds.Unfoldl as Unfoldl
+import qualified DeferredFolds.UnfoldlM as UnfoldlM
 import qualified Control.Foldl as Foldl
 import qualified Edges.Functions.Folds as Foldl
 import qualified Control.Monad.Par as Par
@@ -19,14 +19,14 @@
 edgesTargetAmount :: Edges x target -> Amount target
 edgesTargetAmount (Edges amount _) = Amount amount
 
-edgesUnfoldM :: Monad m => Edges a b -> UnfoldM m (Node a, Node b)
-edgesUnfoldM (Edges _ mpa) =
+edgesUnfoldlM :: Monad m => Edges a b -> UnfoldlM m (Node a, Node b)
+edgesUnfoldlM (Edges _ mpa) =
   fmap (\ (aInt, bWord32) -> (Node aInt, Node (fromIntegral bWord32))) $
-  PrimMultiArray.toAssocsUnfoldM mpa
+  PrimMultiArray.toAssocsUnfoldlM mpa
 
 edgesList :: Edges a b -> [(Node a, Node b)]
 edgesList edges =
-  UnfoldM.fold Foldl.list (edgesUnfoldM edges)
+  UnfoldlM.fold Foldl.list (edgesUnfoldlM edges)
 
 listEdges :: [(Node a, Node b)] -> Edges a b
 listEdges list =
@@ -70,9 +70,9 @@
 
 unindexNodeCounts :: (Eq entity, Hashable entity) => (Int -> Maybe entity) -> NodeCounts entity -> HashMap entity Word128
 unindexNodeCounts lookup (NodeCounts vector) = let
-  unfold = do
-    index <- Unfold.intsInRange 0 (pred (UnboxedVector.length vector))
+  unfoldl = do
+    index <- Unfoldl.intsInRange 0 (pred (UnboxedVector.length vector))
     return $ do
       entity <- lookup index
       return (entity, fromIntegral (UnboxedVector.unsafeIndex vector index))
-  in Unfold.fold (Foldl.hashMapByMapMaybe id) unfold
+  in Unfoldl.fold (Foldl.hashMapByMapMaybe id) unfoldl
diff --git a/library/Edges/NodeCounting.hs b/library/Edges/NodeCounting.hs
--- a/library/Edges/NodeCounting.hs
+++ b/library/Edges/NodeCounting.hs
@@ -16,7 +16,7 @@
 import qualified PrimitiveExtras.PrimArray as PrimArray
 import qualified PrimitiveExtras.PrimMultiArray as PrimMultiArray
 import qualified PrimitiveExtras.TVarArray as TVarArray
-import qualified DeferredFolds.UnfoldM as UnfoldM
+import qualified DeferredFolds.UnfoldlM as UnfoldlM
 import qualified Data.Vector.Unboxed as UnboxedVector
 import qualified Data.Vector.Unboxed.Mutable as MutableUnboxedVector
 
@@ -25,7 +25,7 @@
 nodeTargets (Edges targetAmount edgesPma) (Node sourceIndex) = do
   unsafePerformIO $ do
     targetCountsMVec <- MutableUnboxedVector.new targetAmount
-    UnfoldM.forM_ (fmap fromIntegral $ PrimMultiArray.toUnfoldAtM edgesPma sourceIndex) $ \ targetIndex -> do
+    UnfoldlM.forM_ (fmap fromIntegral $ PrimMultiArray.toUnfoldlAtM edgesPma sourceIndex) $ \ targetIndex -> do
       targetCount <- MutableUnboxedVector.read targetCountsMVec targetIndex
       MutableUnboxedVector.unsafeWrite targetCountsMVec targetIndex (targetCount + 1)
     targetCountsVec <- UnboxedVector.unsafeFreeze targetCountsMVec
@@ -48,7 +48,7 @@
   unsafePerformIO $ do
     targetCountsMVec <- MutableUnboxedVector.new targetAmount
     flip UnboxedVector.imapM_ sourceCountsVec $ \ sourceIndex sourceCount -> if sourceCount >= minSourceCount
-      then UnfoldM.forM_ (fmap fromIntegral $ PrimMultiArray.toUnfoldAtM edgesPma sourceIndex) $ \ targetIndex -> do
+      then UnfoldlM.forM_ (fmap fromIntegral $ PrimMultiArray.toUnfoldlAtM edgesPma sourceIndex) $ \ targetIndex -> do
         targetCount <- MutableUnboxedVector.read targetCountsMVec targetIndex
         MutableUnboxedVector.unsafeWrite targetCountsMVec targetIndex (targetCount + sourceCount)
       else return ()
diff --git a/library/Edges/Prelude.hs b/library/Edges/Prelude.hs
--- a/library/Edges/Prelude.hs
+++ b/library/Edges/Prelude.hs
@@ -110,8 +110,8 @@
 
 -- deferred-folds
 -------------------------
-import DeferredFolds.Unfold as Exports (Unfold(..))
-import DeferredFolds.UnfoldM as Exports (UnfoldM(..))
+import DeferredFolds.Unfoldl as Exports (Unfoldl(..))
+import DeferredFolds.UnfoldlM as Exports (UnfoldlM(..))
 
 -- foldl
 -------------------------
