@@ -25,6 +25,7 @@ module Streamly.Prelude
25 , unfoldrM
25 , unfoldrM
29 -- * Elimination
30 -- * Elimination
30 -- ** General Folds
31 -- ** General Folds
@@ -126,8 +127,15 @@ each = Prelude.foldr cons nil
126iterate :: Streaming t => (a -> a) -> a -> t m a
127iterate :: Streaming t => (a -> a) -> a -> t m a
127iterate step = fromStream . go
128iterate step = fromStream . go
129− go s = scons s (Just (go (step s)))
130+ go s = scons s (Just (go (step s)))
132+-- | Iterate a monadic function from a seed value, streaming the results forever
133+iterateM :: (Streaming t, Monad m) => (a -> m a) -> m a -> t m a
134+iterateM step = fromStream . go
136+ go ms = Stream $ \_ _ yld -> do
138+ yld s (Just (go (step s)))
132-- | Read lines from an IO Handle into a stream of Strings.
140-- | Read lines from an IO Handle into a stream of Strings.
133fromHandle :: (Streaming t, MonadIO m) => IO.Handle -> t m String
141fromHandle :: (Streaming t, MonadIO m) => IO.Handle -> t m String