on master help sign in
add benchmark for takeWhile
5f4de86Harendra Kumar
benchmark/Streamly/Benchmark/Data/Parser.hs+6−1
@@ -16,7 +16,7 @@ import Control.DeepSeq (NFData(..))
16import Control.Monad.Catch (MonadCatch, MonadThrow)
16import Control.Monad.Catch (MonadCatch, MonadThrow)
17-- import Data.Foldable (asum)
17-- import Data.Foldable (asum)
18import System.Random (randomRIO)
18import System.Random (randomRIO)
19−import Prelude hiding (any, all, take, sequence, sequenceA)
19+import Prelude hiding (any, all, take, sequence, sequenceA, takeWhile)
20
20
21-- import qualified Data.Traversable as TR
21-- import qualified Data.Traversable as TR
22import qualified Control.Applicative as AP
22import qualified Control.Applicative as AP
@@ -72,6 +72,10 @@ all value = IP.parse (PR.all (<= value))
72take :: MonadThrow m => Int -> SerialT m a -> m ()
72take :: MonadThrow m => Int -> SerialT m a -> m ()
73take value = IP.parse (PR.take value FL.drain)
73take value = IP.parse (PR.take value FL.drain)
74
74
75+{-# INLINE takeWhile #-}
76+takeWhile :: MonadThrow m => Int -> SerialT m Int -> m ()
77+takeWhile value = IP.parse (PR.takeWhile (<= value) FL.drain)
78+
75{-
79{-
76-- XXX -fspec-constr-recursive=16 makes GHC go beserk when compiling this
80-- XXX -fspec-constr-recursive=16 makes GHC go beserk when compiling this
77{-# INLINE sequenceA #-}
81{-# INLINE sequenceA #-}
@@ -166,6 +170,7 @@ o_1_space_serial_parse value =
166 [ benchIOSink value "any" $ any value
170 [ benchIOSink value "any" $ any value
167 , benchIOSink value "all" $ all value
171 , benchIOSink value "all" $ all value
168 , benchIOSink value "take" $ take value
172 , benchIOSink value "take" $ take value
173+ , benchIOSink value "takeWhile" $ takeWhile value
169 , benchIOSink value "split (all,any)" $ splitAllAny value
174 , benchIOSink value "split (all,any)" $ splitAllAny value
170 , benchIOSink value "many" many
175 , benchIOSink value "many" many
171 , benchIOSink value "some" some
176 , benchIOSink value "some" some