diff --git a/iteratee.cabal b/iteratee.cabal
--- a/iteratee.cabal
+++ b/iteratee.cabal
@@ -1,5 +1,5 @@
 name:          iteratee
-version:       0.8.0.2
+version:       0.8.0.3
 synopsis:      Iteratee-based I/O
 description:
   The Iteratee monad provides strict, safe, and functional I/O. In addition
diff --git a/src/Data/Iteratee/ListLike.hs b/src/Data/Iteratee/ListLike.hs
--- a/src/Data/Iteratee/ListLike.hs
+++ b/src/Data/Iteratee/ListLike.hs
@@ -44,12 +44,15 @@
   ,enumPureNChunk
   -- ** Enumerator Combinators
   ,enumPair
+  -- ** Monadic functions
+  ,mapM_
+  ,foldM
   -- * Classes
   ,module Data.Iteratee.Iteratee
 )
 where
 
-import Prelude hiding (null, head, last, drop, dropWhile, take, break, foldl, foldl1, length, filter, sum, product)
+import Prelude hiding (mapM_, null, head, last, drop, dropWhile, take, break, foldl, foldl1, length, filter, sum, product)
 
 import qualified Data.ListLike as LL
 import qualified Data.ListLike.FoldableLL as FLL
@@ -562,3 +565,33 @@
                            on_cont k e = return $ icont k e
                        in runIter iter' idoneM on_cont
 {-# INLINE enumPureNChunk #-}
+
+
+-- ------------------------------------------------------------------------
+-- Monadic functions
+
+-- | Map a monadic function over the elements of the stream and ignore the
+-- result.
+mapM_ :: (Monad m, LL.ListLike s el, Nullable s)
+      => (el -> m b)
+      -> Iteratee s m ()
+mapM_ f = liftI step
+  where
+    step (Chunk xs) | LL.null xs = mapM_ f
+    step (Chunk xs) = lift (LL.mapM_ f xs) >> mapM_ f
+    step s@(EOF _)  = idone () s
+{-# INLINE mapM_ #-}
+
+-- |The analogue of @Control.Monad.foldM@
+foldM :: (Monad m, LL.ListLike s b, Nullable s)
+      => (a -> b -> m a)
+      -> a
+      -> Iteratee s m a
+foldM f e = liftI step
+  where
+    step (Chunk xs) | LL.null xs = liftI step
+    step (Chunk xs) = do
+        x <- lift $ f e (LL.head xs)
+        joinIM $ enumPure1Chunk (LL.tail xs) (foldM f x)
+    step (EOF _) = return e
+{-# INLINE foldM #-}
