@@ -177,6 +177,12 @@ sepByWords = Stream.parse (wrds even Fold.drain)
178 wrds p = PR.sepBy (PR.takeWhile (not . p) Fold.drain) (PR.dropWhile p)
178 wrds p = PR.sepBy (PR.takeWhile (not . p) Fold.drain) (PR.dropWhile p)
180+{-# INLINE sepByAllWords #-}
181+sepByAllWords :: Monad m => Stream m Int -> m (Either ParseError ())
182+sepByAllWords = Stream.parse (wrds even Fold.drain)
184+ wrds p = PR.sepByAll (PR.takeWhile (not . p) Fold.drain) (PR.dropWhile p)
180-- Returning a list to compare with the sepBy1 in ParserK
186-- Returning a list to compare with the sepBy1 in ParserK
181{-# INLINE sepBy1 #-}
187{-# INLINE sepBy1 #-}
182sepBy1 :: Monad m => Stream m Int -> m (Either ParseError [Int])
188sepBy1 :: Monad m => Stream m Int -> m (Either ParseError [Int])
@@ -199,6 +205,26 @@ deintercalate _ = Stream.parse (partition even)
199 PR.deintercalate
205 PR.deintercalate
200 (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
206 (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
208+{-# INLINE deintercalate1 #-}
209+deintercalate1 :: Monad m => Int -> Stream m Int -> m (Either ParseError ())
210+deintercalate1 _ = Stream.parse (partition even)
216+ (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
218+{-# INLINE deintercalateAll #-}
219+deintercalateAll :: Monad m => Int -> Stream m Int -> m (Either ParseError ())
220+deintercalateAll _ = Stream.parse (partition even)
226+ (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
202{-# INLINE manyWordByEven #-}
228{-# INLINE manyWordByEven #-}
203manyWordByEven :: Monad m => Stream m Int -> m (Either ParseError ())
229manyWordByEven :: Monad m => Stream m Int -> m (Either ParseError ())
204manyWordByEven = Stream.parse (PR.many (PR.wordBy even Fold.drain) Fold.drain)
230manyWordByEven = Stream.parse (PR.many (PR.wordBy even Fold.drain) Fold.drain)
@@ -426,9 +452,12 @@ o_1_space_serial value =
426 , benchIOSink value "groupByRolling" $ groupByRolling
452 , benchIOSink value "groupByRolling" $ groupByRolling
427 , benchIOSink value "wordBy" $ wordBy value
453 , benchIOSink value "wordBy" $ wordBy value
428 , benchIOSink value "sepBy (words)" sepByWords
454 , benchIOSink value "sepBy (words)" sepByWords
455+ , benchIOSink value "sepByAll (words)" sepByAllWords
429 , benchIOSink value "sepBy1" sepBy1
456 , benchIOSink value "sepBy1" sepBy1
430 , benchIOSink value "sepBy1 (words)" sepByWords1
457 , benchIOSink value "sepBy1 (words)" sepByWords1
431 , benchIOSink value "deintercalate" $ deintercalate value
458 , benchIOSink value "deintercalate" $ deintercalate value
459+ , benchIOSink value "deintercalate1" $ deintercalate1 value
460+ , benchIOSink value "deintercalateAll" $ deintercalateAll value
432 , benchIOSink value "splitAp" $ splitAp value
461 , benchIOSink value "splitAp" $ splitAp value
433 , benchIOSink value "splitApBefore" $ splitApBefore value
462 , benchIOSink value "splitApBefore" $ splitApBefore value
434 , benchIOSink value "splitApAfter" $ splitApAfter value
463 , benchIOSink value "splitApAfter" $ splitApAfter value