@@ -168,6 +168,7 @@ import Prelude hiding
170-- >>> import Control.Concurrent (threadDelay)
170-- >>> import Control.Concurrent (threadDelay)
171+-- >>> import Control.Monad (void)
171-- >>> import Control.Monad.IO.Class (MonadIO (liftIO))
172-- >>> import Control.Monad.IO.Class (MonadIO (liftIO))
172-- >>> import Data.Either (fromLeft, fromRight, isLeft, isRight, either)
173-- >>> import Data.Either (fromLeft, fromRight, isLeft, isRight, either)
173-- >>> import Data.Function ((&))
174-- >>> import Data.Function ((&))
@@ -730,6 +731,10 @@ intersperseSuffixBySpan n eff =
731-- | Insert a side effect before consuming an element of a stream.
732-- | Insert a side effect before consuming an element of a stream.
736+-- >>> interspersePrefix_ m = Stream.mapM (\x -> void m >> return x)
733-- >>> input = Stream.fromList "hello"
738-- >>> input = Stream.fromList "hello"
734-- >>> Stream.fold Fold.toList $ Stream.trace putChar $ Stream.interspersePrefix_ (putChar '.' >> return ',') input
739-- >>> Stream.fold Fold.toList $ Stream.trace putChar $ Stream.interspersePrefix_ (putChar '.' >> return ',') input
735-- .h.e.l.l.o"hello"
740-- .h.e.l.l.o"hello"
@@ -746,24 +751,42 @@ interspersePrefix_ m = mapM (\x -> void m >> return x)
746-- Inserting Time
751-- Inserting Time
747------------------------------------------------------------------------------
752------------------------------------------------------------------------------
754+-- XXX This should be in Prelude, should we export this as a helper function?
756+-- | Block the current thread for specified number of seconds.
758+sleep :: MonadIO m => Double -> m ()
759+sleep n = liftIO $ threadDelay $ round $ n * 1000000
749-- | Introduce a delay of specified seconds between elements of the stream.
761-- | Introduce a delay of specified seconds between elements of the stream.
765+-- >>> sleep n = liftIO $ threadDelay $ round $ n * 1000000
766+-- >>> delay = Stream.intersperseM_ . sleep
751-- >>> input = Stream.enumerateFromTo 1 3
770-- >>> input = Stream.enumerateFromTo 1 3
752-- >>> Stream.fold (Fold.drainMapM print) $ Stream.delay 1 input
771-- >>> Stream.fold (Fold.drainMapM print) $ Stream.delay 1 input
757−-- >>> sleep n = liftIO $ threadDelay $ round $ n * 1000000
758−-- >>> delay n = Stream.intersperseM_ $ sleep n
760{-# INLINE delay #-}
776{-# INLINE delay #-}
761delay :: MonadIO m => Double -> Stream m a -> Stream m a
777delay :: MonadIO m => Double -> Stream m a -> Stream m a
762−delay n = intersperseM_ $ liftIO $ threadDelay $ round $ n * 1000000
778+delay = intersperseM_ . sleep
764-- | Introduce a delay of specified seconds after consuming an element of a
780-- | Introduce a delay of specified seconds after consuming an element of a
765-- stream.
781-- stream.
785+-- >>> sleep n = liftIO $ threadDelay $ round $ n * 1000000
786+-- >>> delayPost = Stream.intersperseSuffix_ . sleep
767-- >>> input = Stream.enumerateFromTo 1 3
790-- >>> input = Stream.enumerateFromTo 1 3
768-- >>> Stream.fold (Fold.drainMapM print) $ Stream.delayPost 1 input
791-- >>> Stream.fold (Fold.drainMapM print) $ Stream.delayPost 1 input
@@ -774,11 +797,18 @@ delay n = intersperseM_ $ liftIO $ threadDelay $ round $ n * 1000000
775{-# INLINE delayPost #-}
798{-# INLINE delayPost #-}
776delayPost :: MonadIO m => Double -> Stream m a -> Stream m a
799delayPost :: MonadIO m => Double -> Stream m a -> Stream m a
777−delayPost n = intersperseSuffix_ $ liftIO $ threadDelay $ round $ n * 1000000
800+delayPost = intersperseSuffix_ . sleep
779-- | Introduce a delay of specified seconds before consuming an element of a
802-- | Introduce a delay of specified seconds before consuming an element of a
780-- stream.
803-- stream.
807+-- >>> sleep n = liftIO $ threadDelay $ round $ n * 1000000
808+-- >>> delayPre = Stream.interspersePrefix_ . sleep
782-- >>> input = Stream.enumerateFromTo 1 3
812-- >>> input = Stream.enumerateFromTo 1 3
783-- >>> Stream.fold (Fold.drainMapM print) $ Stream.delayPre 1 input
813-- >>> Stream.fold (Fold.drainMapM print) $ Stream.delayPre 1 input
@@ -789,7 +819,7 @@ delayPost n = intersperseSuffix_ $ liftIO $ threadDelay $ round $ n * 1000000
790{-# INLINE delayPre #-}
820{-# INLINE delayPre #-}
791delayPre :: MonadIO m => Double -> Stream m a -> Stream m a
821delayPre :: MonadIO m => Double -> Stream m a -> Stream m a
792−delayPre n = trace_ $ liftIO $ threadDelay $ round $ n * 1000000
822+delayPre = interspersePrefix_ . sleep
794------------------------------------------------------------------------------
824------------------------------------------------------------------------------
795-- Reorder in sequence
825-- Reorder in sequence