@@ -23,6 +23,7 @@ import qualified Data.Foldable as F
23import qualified Data.Traversable as TR
23import qualified Data.Traversable as TR
24import qualified Streamly as S hiding (runStream)
24import qualified Streamly as S hiding (runStream)
25import qualified Streamly.Prelude as S
25import qualified Streamly.Prelude as S
26+import qualified Streamly.Internal.Data.Fold as FL
26import qualified Streamly.Internal.Data.Parser.ParserK.Types as PR
27import qualified Streamly.Internal.Data.Parser.ParserK.Types as PR
27import qualified Streamly.Internal.Data.Parser.ParserD as PRD
28import qualified Streamly.Internal.Data.Parser.ParserD as PRD
28import qualified Streamly.Internal.Prelude as IP
29import qualified Streamly.Internal.Prelude as IP
@@ -70,6 +71,30 @@ any = PRD.toParserK . PRD.any
70anyK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
71anyK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
71anyK value = IP.parseK (any (> value))
72anyK value = IP.parseK (any (> value))
75+all :: MonadCatch m => (a -> Bool) -> PR.Parser m a Bool
76+all = PRD.toParserK . PRD.all
79+allK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
80+allK value = IP.parseK (all (<= value))
83+take :: MonadCatch m => Int -> PR.Parser m a ()
84+take value = PRD.toParserK $ PRD.take value FL.drain
87+takeK :: MonadCatch m => Int -> SerialT m a -> m ()
88+takeK value = IP.parseK (take value)
90+{-# INLINE takeWhile #-}
91+takeWhile :: MonadCatch m => (a -> Bool) -> PR.Parser m a ()
92+takeWhile p = PRD.toParserK $ PRD.takeWhile p FL.drain
94+{-# INLINE takeWhileK #-}
95+takeWhileK :: MonadCatch m => Int -> SerialT m Int -> m ()
96+takeWhileK value = IP.parseK (takeWhile (<= value))
73{-# INLINE splitApp #-}
98{-# INLINE splitApp #-}
74splitApp :: MonadCatch m
99splitApp :: MonadCatch m
75 => Int -> SerialT m Int -> m (Bool, Bool)
100 => Int -> SerialT m Int -> m (Bool, Bool)
@@ -127,6 +152,9 @@ moduleName = "Data.Parser.ParserK"
127o_1_space_serial :: Int -> [Benchmark]
152o_1_space_serial :: Int -> [Benchmark]
128o_1_space_serial value =
153o_1_space_serial value =
129 [ benchIOSink value "any" $ anyK value
154 [ benchIOSink value "any" $ anyK value
155+ , benchIOSink value "all" $ allK value
156+ , benchIOSink value "take" $ takeK value
157+ , benchIOSink value "takeWhile" $ takeWhileK value
130 , benchIOSink value "splitApp" $ splitApp value
158 , benchIOSink value "splitApp" $ splitApp value