@@ -32,7 +32,6 @@ module Streamly.Internal.Data.Stream.StreamD.Eliminate
33 , foldlMx'
33 , foldlMx'
37 -- * Specific Fold Functions
36 -- * Specific Fold Functions
@@ -132,68 +131,6 @@ splitAt n ls
132{-# ANN type List NoSpecConstr #-}
131{-# ANN type List NoSpecConstr #-}
133newtype List a = List {getList :: [a]}
132newtype List a = List {getList :: [a]}
135−-- | Run a 'Parse' over a stream.
136−{-# INLINE_NORMAL parselMx' #-}
139− => (s -> a -> m (PR.Step s b))
144−parselMx' pstep initial extract (Stream step state) = do
145− initial >>= go SPEC state (List [])
149− -- XXX currently we are using a dumb list based approach for backtracking
150− -- buffer. This can be replaced by a sliding/ring buffer using Data.Array.
151− -- That will allow us more efficient random back and forth movement.
153− go !_ st buf !pst = do
154− r <- step defState st
159− PR.Partial 0 pst1 -> go SPEC s (List []) pst1
160− PR.Partial n pst1 -> do
161− assert (n <= length (x:getList buf)) (return ())
162− let src0 = Prelude.take n (x:getList buf)
163− src = Prelude.reverse src0
164− gobuf SPEC s (List []) (List src) pst1
165− PR.Continue 0 pst1 -> go SPEC s (List (x:getList buf)) pst1
166− PR.Continue n pst1 -> do
167− assert (n <= length (x:getList buf)) (return ())
168− let (src0, buf1) = splitAt n (x:getList buf)
169− src = Prelude.reverse src0
170− gobuf SPEC s (List buf1) (List src) pst1
171− PR.Done _ b -> return b
172− PR.Error err -> throwM $ ParseError err
173− Skip s -> go SPEC s buf pst
176− gobuf !_ s buf (List []) !pst = go SPEC s buf pst
177− gobuf !_ s buf (List (x:xs)) !pst = do
180− PR.Partial 0 pst1 ->
181− gobuf SPEC s (List []) (List xs) pst1
182− PR.Partial n pst1 -> do
183− assert (n <= length (x:getList buf)) (return ())
184− let src0 = Prelude.take n (x:getList buf)
185− src = Prelude.reverse src0 ++ xs
186− gobuf SPEC s (List []) (List src) pst1
187− PR.Continue 0 pst1 ->
188− gobuf SPEC s (List (x:getList buf)) (List xs) pst1
189− PR.Continue n pst1 -> do
190− assert (n <= length (x:getList buf)) (return ())
191− let (src0, buf1) = splitAt n (x:getList buf)
192− src = Prelude.reverse src0 ++ xs
193− gobuf SPEC s (List buf1) (List src) pst1
194− PR.Done _ b -> return b
195− PR.Error err -> throwM $ ParseError err
197-- | Run a 'Parse' over a stream.
134-- | Run a 'Parse' over a stream.
198{-# INLINE_NORMAL parse #-}
135{-# INLINE_NORMAL parse #-}
199parse :: MonadThrow m => PRD.Parser m a b -> Stream m a -> m b
136parse :: MonadThrow m => PRD.Parser m a b -> Stream m a -> m b
@@ -228,7 +165,6 @@ parse (PRD.Parser pstep initial extract) (Stream step state) = do
228 let (src0, buf1) = splitAt n (x:getList buf)
165 let (src0, buf1) = splitAt n (x:getList buf)
229 src = Prelude.reverse src0
166 src = Prelude.reverse src0
230 gobuf SPEC s (List buf1) (List src) pst1
167 gobuf SPEC s (List buf1) (List src) pst1
231− -- Specialcase the Done 1 case
232 PR.Done _ b -> return b
168 PR.Done _ b -> return b
233 PR.Error err -> throwM $ ParseError err
169 PR.Error err -> throwM $ ParseError err
234 Skip s -> go SPEC s buf pst
170 Skip s -> go SPEC s buf pst