@@ -78,6 +78,8 @@ module Streamly.Internal.Data.Stream.StreamD
78 , fromIndicesM
78 , fromIndicesM
79 , generate
79 , generate
80 , generateM
80 , generateM
82 -- ** Enumerations
84 -- ** Enumerations
83 , enumerateFromStepIntegral
85 , enumerateFromStepIntegral
@@ -324,7 +326,7 @@ import Prelude
324 takeWhile, drop, dropWhile, all, any, maximum, minimum, elem,
326 takeWhile, drop, dropWhile, all, any, maximum, minimum, elem,
325 notElem, null, head, tail, zipWith, lookup, foldr1, sequence,
327 notElem, null, head, tail, zipWith, lookup, foldr1, sequence,
326 (!!), scanl, scanl1, concatMap, replicate, enumFromTo, concat,
328 (!!), scanl, scanl1, concatMap, replicate, enumFromTo, concat,
327− reverse)
329+ reverse, iterate)
329import qualified Control.Monad.Catch as MC
331import qualified Control.Monad.Catch as MC
330import qualified Control.Monad.Reader as Reader
332import qualified Control.Monad.Reader as Reader
@@ -448,12 +450,22 @@ unfold (Unfold ustep inject) seed = Stream step Nothing
448-- Specialized Generation
450-- Specialized Generation
449------------------------------------------------------------------------------
451------------------------------------------------------------------------------
453+{-# INLINE_NORMAL repeatM #-}
451repeatM :: Monad m => m a -> Stream m a
454repeatM :: Monad m => m a -> Stream m a
452repeatM x = Stream (\_ _ -> x >>= \r -> return $ Yield r ()) ()
455repeatM x = Stream (\_ _ -> x >>= \r -> return $ Yield r ()) ()
457+{-# INLINE_NORMAL repeat #-}
454repeat :: Monad m => a -> Stream m a
458repeat :: Monad m => a -> Stream m a
455repeat x = Stream (\_ _ -> return $ Yield x ()) ()
459repeat x = Stream (\_ _ -> return $ Yield x ()) ()
461+{-# INLINE_NORMAL iterateM #-}
462+iterateM :: Monad m => (a -> m a) -> m a -> Stream m a
463+iterateM step = Stream (\_ st -> st >>= \x -> return $ Yield x (step x))
465+{-# INLINE_NORMAL iterate #-}
466+iterate :: Monad m => (a -> a) -> a -> Stream m a
467+iterate step st = iterateM (return . step) (return st)
457{-# INLINE_NORMAL replicateM #-}
469{-# INLINE_NORMAL replicateM #-}
458replicateM :: forall m a. Monad m => Int -> m a -> Stream m a
470replicateM :: forall m a. Monad m => Int -> m a -> Stream m a
459replicateM n p = Stream step n
471replicateM n p = Stream step n