on master help sign in
Add a benchmark for foldBreak in Fold module
commit61b907cf8f835f3b66214838a33a57cffb350e89 authorHarendra Kumar <harendra@composewell.com> dateTue 17 May 2022, 22:38 (4 years ago) parent107bebd
1 file changed+8
benchmark/Streamly/Benchmark/Data/Fold.hs+8
benchmark/Streamly/Benchmark/Data/Fold.hs+8
@@ -12,6 +12,7 @@
1212module Main (main) where
1313
1414import Control.DeepSeq (NFData(..))
15+import Control.Monad (when)
1516import Control.Monad.IO.Class (MonadIO(..))
1617import Data.Functor.Identity (Identity)
1718import Data.Map.Strict (Map)
@@ -140,6 +141,12 @@ shortest = IP.fold (FL.shortest FL.sum FL.length)
140141longest :: Monad m => SerialT m Int -> m (Either Int Int)
141142longest = IP.fold (FL.longest FL.sum FL.length)
142143
144+{-# INLINE foldBreak #-}
145+foldBreak :: Monad m => SerialT m Int -> m ()
146+foldBreak s = do
147+ (r, s1) <- IP.foldBreak (FL.take 1 FL.length) s
148+ when (r /= 0) $ foldBreak s1
149+
143150-------------------------------------------------------------------------------
144151-- Distributing by parallel application
145152-------------------------------------------------------------------------------
@@ -388,6 +395,7 @@ o_1_space_serial_composition value =
388395 [ benchIOSink value "filter even" $ filter value
389396 , benchIOSink value "foldFilter even" $ foldFilter value
390397 , benchIOSink value "foldFilter even, odd" $ foldFilter2 value
398+ , benchIOSink value "foldBreak (recursive)" foldBreak
391399 , benchIOSink value "serialWith (all, any)" $ splitAllAny value
392400 , benchIOSink value "serial_ (all, any)" $ serial_ value
393401 , benchIOSink value "tee (all, any)" $ teeAllAny value