@@ -103,6 +103,10 @@ takeStartBy value stream = do
103takeWhile :: MonadCatch m => Int -> SerialT m Int -> m ()
103takeWhile :: MonadCatch m => Int -> SerialT m Int -> m ()
104takeWhile value = IP.parse (PR.takeWhile (<= value) FL.drain)
104takeWhile value = IP.parse (PR.takeWhile (<= value) FL.drain)
106+takeWhileP :: MonadCatch m => Int -> SerialT m Int -> m ()
108+ IP.parse (PR.takeWhileP (<= value) (PR.takeWhile (<= value - 1) FL.drain))
106{-# INLINE takeP #-}
110{-# INLINE takeP #-}
107takeP :: MonadCatch m => Int -> SerialT m a -> m ()
111takeP :: MonadCatch m => Int -> SerialT m a -> m ()
108takeP value = IP.parse (PR.takeP value (PR.fromFold FL.drain))
112takeP value = IP.parse (PR.takeP value (PR.fromFold FL.drain))
@@ -360,6 +364,7 @@ o_1_space_serial value =
360 , benchIOSink value "takeBetween" $ takeBetween value
364 , benchIOSink value "takeBetween" $ takeBetween value
361 , benchIOSink value "takeEQ" $ takeEQ value
365 , benchIOSink value "takeEQ" $ takeEQ value
362 , benchIOSink value "takeWhile" $ takeWhile value
366 , benchIOSink value "takeWhile" $ takeWhile value
367+ , benchIOSink value "takeWhileP" $ takeWhileP value
363 , benchIOSink value "takeP" $ takeP value
368 , benchIOSink value "takeP" $ takeP value
364 , benchIOSink value "dropWhile" $ dropWhile value
369 , benchIOSink value "dropWhile" $ dropWhile value
365 , benchIOSink value "takeStartBy" $ takeStartBy value
370 , benchIOSink value "takeStartBy" $ takeStartBy value