@@ -17,6 +17,7 @@ module Main
1717import Control.DeepSeq (NFData(..))
1818import Control.Monad.Catch (MonadCatch, MonadThrow)
1919import Data.Foldable (asum)
20+import Data.Function ((&))
2021import Data.Functor (($>))
2122import Data.Maybe (fromMaybe)
2223import Streamly.Internal.Data.Stream (Stream)
@@ -240,10 +241,20 @@ parseManyGroupsRolling b =
240241
241242{-# INLINE parseManyGroupsRollingEither #-}
242243parseManyGroupsRollingEither :: (MonadThrow m, MonadCatch m) =>
243− (Int -> Int -> Bool) -> Stream m Int -> m ()
244−parseManyGroupsRollingEither cmp =
245− Stream.fold Fold.drain
246− . Stream.parseManyD (PR.groupByRollingEither cmp Fold.drain Fold.drain)
244+ (Int -> Int -> Bool) -> Int -> m ()
245+parseManyGroupsRollingEither cmp value = do
246+ sourceUnfoldrM value 1
247+ & Stream.parseManyD (PR.groupByRollingEither cmp Fold.drain Fold.drain)
248+ & Stream.fold Fold.drain
249+
250+{-# INLINE parseManyGroupsRollingEitherAlt #-}
251+parseManyGroupsRollingEitherAlt :: (MonadThrow m, MonadCatch m) =>
252+ (Int -> Int -> Bool) -> Int -> m ()
253+parseManyGroupsRollingEitherAlt cmp value = do
254+ sourceUnfoldrM value 1
255+ & fmap (\x -> if even x then x + 2 else x)
256+ & Stream.parseManyD (PR.groupByRollingEither cmp Fold.drain Fold.drain)
257+ & Stream.fold Fold.drain
247258
248259-------------------------------------------------------------------------------
249260-- Parsing with unfolds
@@ -368,12 +379,12 @@ o_1_space_serial_nested value =
368379 , benchIOSink value "parseMany groupBy (1 group)" $ parseManyGroups True
369380 , benchIOSink value "parseMany groupRollingBy (1 group)"
370381 $ parseManyGroupsRolling True
371− , benchIOSink value "parseMany groupRollingByEither (Left)"
372− $ parseManyGroupsRollingEither (<)
373− , benchIOSink value "parseMany groupRollingByEither (Right)"
374− $ parseManyGroupsRollingEither (>)
375− , benchIOSinkRandom value "parseMany groupRollingByEither (Alternating)"
376− $ parseManyGroupsRollingEither (>)
382+ , bench "parseMany groupRollingByEither (Left)"
383+ $ nfIO $ parseManyGroupsRollingEither (<) value
384+ , bench "parseMany groupRollingByEither (Right)"
385+ $ nfIO $ parseManyGroupsRollingEither (>) value
386+ , bench "parseMany groupRollingByEither (Alternating)"
387+ $ nfIO $ parseManyGroupsRollingEitherAlt (>) value
377388 ]
378389
379390o_1_space_serial_unfold :: Int -> [Array.Array Int] -> [Benchmark]
@@ -412,7 +423,9 @@ o_n_space_serial value =
412423-------------------------------------------------------------------------------
413424
414425main :: IO ()
415−main = runWithCLIOptsEnv defaultStreamSize alloc allBenchmarks
426+main = do
427+ x <- randomRIO (1,1)
428+ runWithCLIOptsEnv (defaultStreamSize + x) alloc allBenchmarks
416429
417430 where
418431