@@ -23,6 +23,7 @@ import qualified Data.Foldable as F
2323import qualified Data.Traversable as TR
2424import qualified Streamly as S hiding (runStream)
2525import qualified Streamly.Prelude as S
26+import qualified Streamly.Internal.Data.Fold as FL
2627import qualified Streamly.Internal.Data.Parser.ParserK.Types as PR
2728import qualified Streamly.Internal.Data.Parser.ParserD as PRD
2829import qualified Streamly.Internal.Prelude as IP
@@ -70,6 +71,30 @@ any = PRD.toParserK . PRD.any
7071anyK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
7172anyK value = IP.parseK (any (> value))
7273
74+{-# INLINE all #-}
75+all :: MonadCatch m => (a -> Bool) -> PR.Parser m a Bool
76+all = PRD.toParserK . PRD.all
77+
78+{-# INLINE allK #-}
79+allK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
80+allK value = IP.parseK (all (<= value))
81+
82+{-# INLINE take #-}
83+take :: MonadCatch m => Int -> PR.Parser m a ()
84+take value = PRD.toParserK $ PRD.take value FL.drain
85+
86+{-# INLINE takeK #-}
87+takeK :: MonadCatch m => Int -> SerialT m a -> m ()
88+takeK value = IP.parseK (take value)
89+
90+{-# INLINE takeWhile #-}
91+takeWhile :: MonadCatch m => (a -> Bool) -> PR.Parser m a ()
92+takeWhile p = PRD.toParserK $ PRD.takeWhile p FL.drain
93+
94+{-# INLINE takeWhileK #-}
95+takeWhileK :: MonadCatch m => Int -> SerialT m Int -> m ()
96+takeWhileK value = IP.parseK (takeWhile (<= value))
97+
7398{-# INLINE splitApp #-}
7499splitApp :: MonadCatch m
75100 => Int -> SerialT m Int -> m (Bool, Bool)
@@ -127,6 +152,9 @@ moduleName = "Data.Parser.ParserK"
127152o_1_space_serial :: Int -> [Benchmark]
128153o_1_space_serial value =
129154 [ benchIOSink value "any" $ anyK value
155+ , benchIOSink value "all" $ allK value
156+ , benchIOSink value "take" $ takeK value
157+ , benchIOSink value "takeWhile" $ takeWhileK value
130158 , benchIOSink value "splitApp" $ splitApp value
131159 ]
132160