on master help sign in
Add sequence_ benchmark for ParserD.
9ebca6ePranay Sashank
benchmark/Streamly/Benchmark/Data/Parser/ParserD.hs+12−1
@@ -20,7 +20,7 @@ import Data.Foldable (asum)
20import Data.Functor (($>))
20import Data.Functor (($>))
21import Data.Maybe (fromMaybe)
21import Data.Maybe (fromMaybe)
22import System.Random (randomRIO)
22import 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)
24
24
25import qualified Data.Traversable as TR
25import qualified Data.Traversable as TR
26import qualified Data.Foldable as F
26import qualified Data.Foldable as F
@@ -224,6 +224,16 @@ sequence value xs = do
224 x <- IP.parseD (TR.sequence (replicate value (PR.satisfy (> 0)))) xs
224 x <- IP.parseD (TR.sequence (replicate value (PR.satisfy (> 0)))) xs
225 return $ length x
225 return $ length x
226
226
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+
227-- choice using the "Alternative" instance with direct style parser type has
237-- choice using the "Alternative" instance with direct style parser type has
228-- quadratic performance complexity.
238-- quadratic performance complexity.
229--
239--
@@ -284,6 +294,7 @@ o_n_space_serial value =
284 [ benchIOSink value "sequenceA/100" $ sequenceA (value `div` 100)
294 [ benchIOSink value "sequenceA/100" $ sequenceA (value `div` 100)
285 , benchIOSink value "sequenceA_/100" $ sequenceA_ (value `div` 100)
295 , benchIOSink value "sequenceA_/100" $ sequenceA_ (value `div` 100)
286 , benchIOSink value "sequence/100" $ sequence (value `div` 100)
296 , benchIOSink value "sequence/100" $ sequence (value `div` 100)
297+ , benchIOSink value "sequence_/100" $ sequence_ (value `div` 100)
287 , benchIOSink value "choice/100" $ choice (value `div` 100)
298 , benchIOSink value "choice/100" $ choice (value `div` 100)
288 ]
299 ]
289
300