diff --git a/monad-loops.cabal b/monad-loops.cabal
--- a/monad-loops.cabal
+++ b/monad-loops.cabal
@@ -1,5 +1,5 @@
 name:                   monad-loops
-version:                0.3.2.0
+version:                0.3.3.0
 stability:              provisional
 license:                BSD3
 license-file:           LICENSE
diff --git a/src/Control/Monad/Loops.hs b/src/Control/Monad/Loops.hs
--- a/src/Control/Monad/Loops.hs
+++ b/src/Control/Monad/Loops.hs
@@ -144,6 +144,13 @@
                     then go
                     else return y
 
+{-# SPECIALIZE iterateM_ :: (a -> IO a) -> a -> IO b #-}
+-- |Execute an action forever, feeding the result of each execution as the
+-- input to the next.
+iterateM_ :: Monad m => (a -> m a) -> a -> m b
+iterateM_ f = g
+    where g x = f x >>= g
+
 {-# SPECIALIZE untilM  :: IO a -> IO Bool -> IO [a] #-}
 {-# SPECIALIZE untilM' :: Monad m => m a -> m Bool -> m [a] #-}
 {-# SPECIALIZE untilM' :: IO a -> IO Bool -> IO [a] #-}
