diff --git a/mono-traversable.cabal b/mono-traversable.cabal
--- a/mono-traversable.cabal
+++ b/mono-traversable.cabal
@@ -1,5 +1,5 @@
 name:                mono-traversable
-version:             0.3.0.3
+version:             0.3.1
 synopsis:            Type classes for mapping, folding, and traversing monomorphic containers
 description:         Monomorphic variants of the Functor, Foldable, and Traversable typeclasses. Contains even more experimental code for abstracting containers and sequences.
 homepage:            https://github.com/snoyberg/mono-traversable
@@ -52,6 +52,7 @@
                      , semigroups
                      , containers
                      , unordered-containers
+                     , foldl
                      
 source-repository head
   type: git
diff --git a/src/Data/MonoTraversable.hs b/src/Data/MonoTraversable.hs
--- a/src/Data/MonoTraversable.hs
+++ b/src/Data/MonoTraversable.hs
@@ -824,3 +824,27 @@
 oforM :: (MonoTraversable mono, Monad f) => mono -> (Element mono -> f (Element mono)) -> f mono
 oforM = flip omapM
 {-# INLINE oforM #-}
+
+-- | A strict left fold, together with an unwrap function.
+--
+-- This is convenient when the accumulator value is not the same as the final
+-- expected type. It is provided mainly for integration with the @foldl@
+-- package, to be used in conjunction with @purely@.
+--
+-- Since 0.3.1
+ofoldlUnwrap :: MonoFoldable mono
+             => (x -> Element mono -> x) -> x -> (x -> b) -> mono -> b
+ofoldlUnwrap f x unwrap mono = unwrap (ofoldl' f x mono)
+
+-- | A monadic strict left fold, together with an unwrap function.
+--
+-- Similar to @foldlUnwrap@, but allows monadic actions. To be used with
+-- @impurely@ from @foldl@.
+--
+-- Since 0.3.1
+ofoldMUnwrap :: (Monad m, MonoFoldable mono)
+             => (x -> Element mono -> m x) -> m x -> (x -> m b) -> mono -> m b
+ofoldMUnwrap f mx unwrap mono = do
+    x <- mx
+    x' <- ofoldlM f x mono
+    unwrap x'
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -29,6 +29,7 @@
 import Data.Containers
 import qualified Data.IntSet as IntSet
 import Control.Arrow (first, second)
+import qualified Control.Foldl as Foldl
 
 main :: IO ()
 main = hspec $ do
@@ -274,3 +275,13 @@
         test "Data.Map" Map.empty Map.lookup Map.insert Map.delete
         test "Data.IntMap" IntMap.empty IntMap.lookup IntMap.insert IntMap.delete
         test "Data.HashMap" HashMap.empty HashMap.lookup HashMap.insert HashMap.delete
+
+    describe "foldl integration" $ do
+        prop "vector" $ \xs -> do
+            x1 <- Foldl.foldM Foldl.vector (xs :: [Int])
+            x2 <- Foldl.impurely ofoldMUnwrap Foldl.vector xs
+            x2 `shouldBe` (x1 :: V.Vector Int)
+        prop "length" $ \xs -> do
+            let x1 = Foldl.fold Foldl.length (xs :: [Int])
+                x2 = Foldl.purely ofoldlUnwrap Foldl.length xs
+            x2 `shouldBe` x1
