on master help sign in
Add drain API to Serial module
ba8833dRanjeet Kumar Ranjan
benchmark/lib/Streamly/Benchmark/Common.hs+2−3
@@ -53,9 +53,8 @@ import Control.DeepSeq (NFData(..))
53import Data.Functor.Identity (Identity, runIdentity)
53import Data.Functor.Identity (Identity, runIdentity)
54import System.Random (randomRIO)
54import System.Random (randomRIO)
55
55
56−import qualified Streamly.Prelude as S
56+import qualified Streamly.Internal.Data.Stream.Serial as S
57
57
58−import Streamly.Prelude (SerialT)
59import Gauge
58import Gauge
60
59
61-------------------------------------------------------------------------------
60-------------------------------------------------------------------------------
@@ -107,7 +106,7 @@ benchPureSink1 name f =
107 bench name $ nfIO $ randomRIO (1,1) >>= return . runIdentity . f
106 bench name $ nfIO $ randomRIO (1,1) >>= return . runIdentity . f
108
107
109{-# INLINE benchPureSrc #-}
108{-# INLINE benchPureSrc #-}
110−benchPureSrc :: String -> (Int -> SerialT Identity a) -> Benchmark
109+benchPureSrc :: String -> (Int -> S.SerialT Identity a) -> Benchmark
111benchPureSrc name src = benchPure name src (runIdentity . S.drain)
110benchPureSrc name src = benchPure name src (runIdentity . S.drain)
112
111
113-------------------------------------------------------------------------------
112-------------------------------------------------------------------------------
core/src/Streamly/Internal/Data/Stream/Serial.hs+5
@@ -32,6 +32,7 @@ module Streamly.Internal.Data.Stream.Serial
32 -- * Elimination
32 -- * Elimination
33 , toList
33 , toList
34 , foldWith
34 , foldWith
35+ , drain
35
36
36 -- * Transformation
37 -- * Transformation
37 , map
38 , map
@@ -341,3 +342,7 @@ list = fromStreamD . D.fromList
341{-# INLINE unfoldrM #-}
342{-# INLINE unfoldrM #-}
342unfoldrM :: Monad m => (b -> m (Maybe (a, b))) -> b -> SerialT m a
343unfoldrM :: Monad m => (b -> m (Maybe (a, b))) -> b -> SerialT m a
343unfoldrM step seed = SerialT $ D.toStreamK (D.unfoldrM step seed)
344unfoldrM step seed = SerialT $ D.toStreamK (D.unfoldrM step seed)
345+
346+{-# INLINE drain #-}
347+drain :: Monad m => SerialT m a -> m ()
348+drain (SerialT m) = P.drain m