@@ -119,9 +119,15 @@ groupByRolling = IP.parse (PR.groupByRolling (<=) FL.drain)
119119wordBy :: MonadCatch m => Int -> SerialT m Int -> m ()
120120wordBy value = IP.parse (PR.wordBy (>= value) FL.drain)
121121
122+{-# INLINE sepByWords #-}
123+sepByWords :: MonadCatch m => Int -> SerialT m Int -> m ()
124+sepByWords _ = IP.parse (wrds even FL.drain)
125+ where
126+ wrds p f = PR.sepBy f (PR.takeWhile (not . p) FL.drain) (PR.dropWhile p)
127+
122128{-# INLINE manyWordByEven #-}
123129manyWordByEven :: 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)
125131
126132{-# INLINE many #-}
127133many :: MonadCatch m => SerialT m Int -> m Int
@@ -350,6 +356,7 @@ o_1_space_serial value =
350356 , benchIOSink value "groupBy" $ groupBy
351357 , benchIOSink value "groupByRolling" $ groupByRolling
352358 , benchIOSink value "wordBy" $ wordBy value
359+ , benchIOSink value "sepBy (words)" $ sepByWords value
353360 , benchIOSink value "splitAp" $ splitAp value
354361 , benchIOSink value "splitApBefore" $ splitApBefore value
355362 , benchIOSink value "splitApAfter" $ splitApAfter value