@@ -103,6 +103,10 @@ takeStartBy value stream = do
103103takeWhile :: MonadCatch m => Int -> SerialT m Int -> m ()
104104takeWhile value = IP.parse (PR.takeWhile (<= value) FL.drain)
105105
106+takeWhileP :: MonadCatch m => Int -> SerialT m Int -> m ()
107+takeWhileP value =
108+ IP.parse (PR.takeWhileP (<= value) (PR.takeWhile (<= value - 1) FL.drain))
109+
106110{-# INLINE takeP #-}
107111takeP :: MonadCatch m => Int -> SerialT m a -> m ()
108112takeP value = IP.parse (PR.takeP value (PR.fromFold FL.drain))
@@ -360,6 +364,7 @@ o_1_space_serial value =
360364 , benchIOSink value "takeBetween" $ takeBetween value
361365 , benchIOSink value "takeEQ" $ takeEQ value
362366 , benchIOSink value "takeWhile" $ takeWhile value
367+ , benchIOSink value "takeWhileP" $ takeWhileP value
363368 , benchIOSink value "takeP" $ takeP value
364369 , benchIOSink value "dropWhile" $ dropWhile value
365370 , benchIOSink value "takeStartBy" $ takeStartBy value