on master help sign in
Add a foldBreak benchmark for StreamD
commit37e226e2636f80ff280f15f43e08dfde3dcabfe2 authorHarendra Kumar <harendra@composewell.com> dateWed 18 May 2022, 12:51 (4 years ago) parent61b907c
1 file changed+8
benchmark/Streamly/Benchmark/Data/Stream/StreamD.hs+8
benchmark/Streamly/Benchmark/Data/Stream/StreamD.hs+8
@@ -29,6 +29,7 @@ import Prelude hiding (tail, mapM_, foldl, last, map, mapM, concatMap, zip)
2929import qualified Prelude as P
3030import qualified Streamly.Internal.Data.Stream.StreamD as S
3131import qualified Streamly.Internal.Data.Unfold as UF
32+import qualified Streamly.Internal.Data.Fold as FL
3233
3334import Streamly.Benchmark.Common
3435
@@ -125,6 +126,12 @@ uncons s = do
125126 Nothing -> return ()
126127 Just (_, t) -> uncons t
127128
129+{-# INLINE foldBreak #-}
130+foldBreak :: Monad m => Stream m Int -> m ()
131+foldBreak s = do
132+ (r, s1) <- S.foldBreak (FL.take 1 FL.length) s
133+ when (r /= 0) $ foldBreak s1
134+
128135{-# INLINE tail #-}
129136tail :: Monad m => Stream m a -> m ()
130137tail s = S.tail s >>= P.mapM_ tail
@@ -439,6 +446,7 @@ o_1_space =
439446 [ benchFold "toNull" toNull sourceUnfoldrM
440447 , benchFold "mapM_" mapM_ sourceUnfoldrM
441448 , benchFold "uncons" uncons sourceUnfoldrM
449+ , benchFold "foldBreak" foldBreak sourceUnfoldrM
442450 , benchFold "foldl'" foldl sourceUnfoldrM
443451 , benchFold "last" last sourceUnfoldrM
444452 ]