@@ -76,6 +76,14 @@ takeWhile value = IP.parse (PR.takeWhile (<= value) FL.drain)
7676groupBy :: MonadCatch m => SerialT m Int -> m ()
7777groupBy = IP.parse (PR.groupBy (<=) FL.drain)
7878
79+{-# INLINE wordBy #-}
80+wordBy :: MonadCatch m => Int -> SerialT m Int -> m ()
81+wordBy value = IP.parse (PR.wordBy (>= value) FL.drain)
82+
83+{-# INLINE manyWordByEven #-}
84+manyWordByEven :: MonadCatch m => SerialT m Int -> m ()
85+manyWordByEven = IP.parse (PR.many FL.drain (PR.wordBy (Prelude.even) FL.drain))
86+
7987{-# INLINE many #-}
8088many :: MonadCatch m => SerialT m Int -> m Int
8189many = IP.parse (PR.many FL.length (PR.satisfy (> 0)))
@@ -263,11 +271,13 @@ o_1_space_serial value =
263271 , benchIOSink value "takeWhile" $ takeWhile value
264272 , benchIOSink value "drainWhile" $ drainWhile value
265273 , benchIOSink value "groupBy" $ groupBy
274+ , benchIOSink value "wordBy" $ wordBy value
266275 , benchIOSink value "splitAp" $ splitAp value
267276 , benchIOSink value "splitApBefore" $ splitApBefore value
268277 , benchIOSink value "splitApAfter" $ splitApAfter value
269278 , benchIOSink value "splitWith" $ splitWith value
270279 , benchIOSink value "many" many
280+ , benchIOSink value "many (wordBy even)" $ manyWordByEven
271281 , benchIOSink value "some" some
272282 , benchIOSink value "manyTill" $ manyTill value
273283 , benchIOSink value "tee" $ teeAllAny value