@@ -32,7 +32,6 @@ module Streamly.Internal.Data.Stream.StreamD.Eliminate
3232 , foldl'
3333 , foldlMx'
3434 , foldlx'
35− , parselMx'
3635
3736 -- * Specific Fold Functions
3837 , drain
@@ -132,68 +131,6 @@ splitAt n ls
132131{-# ANN type List NoSpecConstr #-}
133132newtype List a = List {getList :: [a]}
134133
135−-- | Run a 'Parse' over a stream.
136−{-# INLINE_NORMAL parselMx' #-}
137−parselMx'
138− :: MonadThrow m
139− => (s -> a -> m (PR.Step s b))
140− -> m s
141− -> (s -> m b)
142− -> Stream m a
143− -> m b
144−parselMx' pstep initial extract (Stream step state) = do
145− initial >>= go SPEC state (List [])
146−
147− where
148−
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.
152− {-# INLINE go #-}
153− go !_ st buf !pst = do
154− r <- step defState st
155− case r of
156− Yield x s -> do
157− pRes <- pstep pst x
158− case pRes of
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
174− Stop -> extract pst
175−
176− gobuf !_ s buf (List []) !pst = go SPEC s buf pst
177− gobuf !_ s buf (List (x:xs)) !pst = do
178− pRes <- pstep pst x
179− case pRes of
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
196−
197134-- | Run a 'Parse' over a stream.
198135{-# INLINE_NORMAL parse #-}
199136parse :: 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
228165 let (src0, buf1) = splitAt n (x:getList buf)
229166 src = Prelude.reverse src0
230167 gobuf SPEC s (List buf1) (List src) pst1
231− -- Specialcase the Done 1 case
232168 PR.Done _ b -> return b
233169 PR.Error err -> throwM $ ParseError err
234170 Skip s -> go SPEC s buf pst