diff --git a/deferred-folds.cabal b/deferred-folds.cabal
--- a/deferred-folds.cabal
+++ b/deferred-folds.cabal
@@ -1,7 +1,7 @@
 name:
   deferred-folds
 version:
-  0.4.0.1
+  0.4.1
 category:
   Folding
 synopsis:
@@ -45,4 +45,5 @@
     DeferredFolds.Prelude
   build-depends:
     base >=4.7 && <5,
+    containers >=0.5 && <0.6,
     foldl >=1 && <2
diff --git a/library/DeferredFolds/Prelude.hs b/library/DeferredFolds/Prelude.hs
--- a/library/DeferredFolds/Prelude.hs
+++ b/library/DeferredFolds/Prelude.hs
@@ -17,6 +17,14 @@
 import Control.Applicative as Exports
 import Control.Monad as Exports
 
+-- containers
+-------------------------
+import Data.IntMap.Strict as Exports (IntMap)
+import Data.Map.Strict as Exports (Map)
+import Data.IntSet as Exports (IntSet)
+import Data.Set as Exports (Set)
+import Data.Sequence as Exports (Seq)
+
 -- foldl
 -------------------------
 import Control.Foldl as Exports (Fold(..), FoldM(..))
diff --git a/library/DeferredFolds/Unfold.hs b/library/DeferredFolds/Unfold.hs
--- a/library/DeferredFolds/Unfold.hs
+++ b/library/DeferredFolds/Unfold.hs
@@ -3,6 +3,8 @@
 
 import DeferredFolds.Prelude
 import qualified DeferredFolds.Prelude as A
+import qualified Data.Map.Strict as C
+import qualified Data.IntMap.Strict as D
 
 
 {-|
@@ -112,6 +114,7 @@
 foldable foldable = Unfold (\ step init -> A.foldl' step init foldable)
 
 {-| Ints in the specified inclusive range -}
+{-# INLINE intsInRange #-}
 intsInRange :: Int -> Int -> Unfold Int
 intsInRange from to =
   Unfold $ \ step init ->
@@ -121,3 +124,13 @@
         then loop (step state int) (succ int)
         else state
     in loop init from
+
+{-# INLINE map #-}
+map :: Map key value -> Unfold (key, value)
+map map =
+  Unfold (\ step init -> C.foldlWithKey' (\ state key value -> step state (key, value)) init map)
+
+{-# INLINE intMap #-}
+intMap :: IntMap value -> Unfold (Int, value)
+intMap intMap =
+  Unfold (\ step init -> D.foldlWithKey' (\ state key value -> step state (key, value)) init intMap)
