on master help sign in
Add sequence_ benchmark for ParserD.
commit9ebca6ec0a074c019b1a072dfdda34afb390c5f5 authorPranay Sashank <pranaysashank@composewell.com> dateWed 10 Feb 2021, 00:33 (6 years ago) parentc1c77d0
1 file changed+12−1
benchmark/Streamly/Benchmark/Data/Parser/ParserD.hs+12−1
benchmark/Streamly/Benchmark/Data/Parser/ParserD.hs+12−1
@@ -20,7 +20,7 @@ import Data.Foldable (asum)
2020import Data.Functor (($>))
2121import Data.Maybe (fromMaybe)
2222import System.Random (randomRIO)
23−import Prelude hiding (any, all, take, sequence, sequenceA, takeWhile, span)
23+import Prelude hiding (any, all, take, sequence, sequenceA, sequence_, takeWhile, span)
2424
2525import qualified Data.Traversable as TR
2626import qualified Data.Foldable as F
@@ -224,6 +224,16 @@ sequence value xs = do
224224 x <- IP.parseD (TR.sequence (replicate value (PR.satisfy (> 0)))) xs
225225 return $ length x
226226
227+{-# INLINE sequence_ #-}
228+sequence_ :: MonadCatch m => Int -> SerialT m Int -> m ()
229+sequence_ value xs =
230+ IP.parseD (foldr f (return ()) (replicate value (PR.takeBetween 0 1 FL.drain))) xs
231+
232+ where
233+
234+ {-# INLINE f #-}
235+ f m k = m >>= (\_ -> k)
236+
227237-- choice using the "Alternative" instance with direct style parser type has
228238-- quadratic performance complexity.
229239--
@@ -284,6 +294,7 @@ o_n_space_serial value =
284294 [ benchIOSink value "sequenceA/100" $ sequenceA (value `div` 100)
285295 , benchIOSink value "sequenceA_/100" $ sequenceA_ (value `div` 100)
286296 , benchIOSink value "sequence/100" $ sequence (value `div` 100)
297+ , benchIOSink value "sequence_/100" $ sequence_ (value `div` 100)
287298 , benchIOSink value "choice/100" $ choice (value `div` 100)
288299 ]
289300