@@ -119,9 +119,15 @@ groupByRolling = IP.parse (PR.groupByRolling (<=) FL.drain)
119wordBy :: MonadCatch m => Int -> SerialT m Int -> m ()
119wordBy :: MonadCatch m => Int -> SerialT m Int -> m ()
120wordBy value = IP.parse (PR.wordBy (>= value) FL.drain)
120wordBy value = IP.parse (PR.wordBy (>= value) FL.drain)
122+{-# INLINE sepByWords #-}
123+sepByWords :: MonadCatch m => Int -> SerialT m Int -> m ()
124+sepByWords _ = IP.parse (wrds even FL.drain)
126+ wrds p f = PR.sepBy f (PR.takeWhile (not . p) FL.drain) (PR.dropWhile p)
122{-# INLINE manyWordByEven #-}
128{-# INLINE manyWordByEven #-}
123manyWordByEven :: MonadCatch m => SerialT m Int -> m ()
129manyWordByEven :: MonadCatch m => SerialT m Int -> m ()
124−manyWordByEven = IP.parse (PR.many (PR.wordBy (Prelude.even) FL.drain) FL.drain)
130+manyWordByEven = IP.parse (PR.many (PR.wordBy even FL.drain) FL.drain)
126{-# INLINE many #-}
132{-# INLINE many #-}
127many :: MonadCatch m => SerialT m Int -> m Int
133many :: MonadCatch m => SerialT m Int -> m Int
@@ -350,6 +356,7 @@ o_1_space_serial value =
350 , benchIOSink value "groupBy" $ groupBy
356 , benchIOSink value "groupBy" $ groupBy
351 , benchIOSink value "groupByRolling" $ groupByRolling
357 , benchIOSink value "groupByRolling" $ groupByRolling
352 , benchIOSink value "wordBy" $ wordBy value
358 , benchIOSink value "wordBy" $ wordBy value
359+ , benchIOSink value "sepBy (words)" $ sepByWords value
353 , benchIOSink value "splitAp" $ splitAp value
360 , benchIOSink value "splitAp" $ splitAp value
354 , benchIOSink value "splitApBefore" $ splitApBefore value
361 , benchIOSink value "splitApBefore" $ splitApBefore value
355 , benchIOSink value "splitApAfter" $ splitApAfter value
362 , benchIOSink value "splitApAfter" $ splitApAfter value