@@ -974,7 +974,7 @@ parselMx'
974974 :: Monad m
975975 => (s -> a -> m (PR.Step s))
976976 -> m s
977− -> (s -> m (Either String (Int, b)))
977+ -> (s -> m (Either String b))
978978 -> Stream m a
979979 -> m (Either String b)
980980parselMx' pstep initial extract (Stream step state) = do
@@ -996,15 +996,15 @@ parselMx' pstep initial extract (Stream step state) = do
996996 PR.Keep n pst1 -> do
997997 assert (n <= length (x:buf)) (return ())
998998 go SPEC s (Prelude.take n (x:buf)) pst1
999+ -- PR.Back 0 pst1 -> go SPEC s (x:buf) pst1
9991000 PR.Back n pst1 -> do
10001001 assert (n <= length (x:buf)) (return ())
10011002 let (src0, buf1) = splitAt n (x:buf)
10021003 src = Prelude.reverse src0
10031004 gobuf SPEC s buf1 src pst1
1004− PR.Hold pst1 -> go SPEC s (x:buf) pst1
1005− PR.Halt pst1 -> fmap (fmap snd) (extract pst1)
1005+ PR.Halt _ pst1 -> extract pst1
10061006 Skip s -> go SPEC s buf pst
1007− Stop -> fmap (fmap snd) (extract pst)
1007+ Stop -> extract pst
10081008
10091009 gobuf !_ s buf [] !pst = go SPEC s buf pst
10101010 gobuf !_ s buf (x:xs) !pst = do
@@ -1014,13 +1014,13 @@ parselMx' pstep initial extract (Stream step state) = do
10141014 PR.Keep n pst1 -> do
10151015 assert (n <= length (x:buf)) (return ())
10161016 gobuf SPEC s (Prelude.take n (x:buf)) xs pst1
1017+ -- PR.Back 0 pst1 -> gobuf SPEC s (x:buf) xs pst1
10171018 PR.Back n pst1 -> do
10181019 assert (n <= length (x:buf)) (return ())
10191020 let (src0, buf1) = splitAt n (x:buf)
10201021 src = Prelude.reverse src0 ++ xs
10211022 gobuf SPEC s buf1 src pst1
1022− PR.Hold pst1 -> gobuf SPEC s (x:buf) xs pst1
1023− PR.Halt pst1 -> fmap (fmap snd) (extract pst1)
1023+ PR.Halt _ pst1 -> extract pst1
10241024
10251025------------------------------------------------------------------------------
10261026-- Repeated parsing
@@ -1069,19 +1069,19 @@ parseChunks (Parse pstep initial extract) (Stream step state) =
10691069 assert (n <= length (x:buf)) (return ())
10701070 let buf1 = Prelude.take n (x:buf)
10711071 return $ Skip $ ParseChunksStream s buf1 pst1
1072+ -- PR.Back 0 pst1 ->
1073+ -- return $ Skip $ ParseChunksStream s (x:buf) pst1
10721074 PR.Back n pst1 -> do
10731075 assert (n <= length (x:buf)) (return ())
10741076 let (src0, buf1) = splitAt n (x:buf)
10751077 src = Prelude.reverse src0
10761078 return $ Skip $ ParseChunksBuf src s buf1 pst1
1077− PR.Hold pst1 ->
1078− return $ Skip $ ParseChunksStream s (x:buf) pst1
1079− PR.Halt pst1 -> do
1079+ -- XXX Halt 0 common case?
1080+ PR.Halt n pst1 -> do
10801081 res <- extract pst1
10811082 case res of
10821083 Left err -> error err
1083− -- XXX (0,a) common case
1084− Right (n, a) -> do
1084+ Right a -> do
10851085 assert (n <= length (x:buf)) (return ())
10861086 let src = Prelude.reverse (Prelude.take n (x:buf))
10871087 return $ Skip $ ParseChunksYield a (ParseChunksInit src s)
@@ -1090,8 +1090,8 @@ parseChunks (Parse pstep initial extract) (Stream step state) =
10901090 res <- extract pst
10911091 case res of
10921092 Left err -> error err
1093− Right (n, a) -> do
1094− let src = Prelude.reverse (Prelude.take n (buf))
1093+ Right a -> do
1094+ let src = Prelude.reverse buf
10951095 return $ Skip $ ParseChunksYield a (ParseChunksInitLeftOver src)
10961096
10971097 -- go back to stream processing mode
@@ -1107,19 +1107,18 @@ parseChunks (Parse pstep initial extract) (Stream step state) =
11071107 assert (n <= length (x:buf)) (return ())
11081108 let buf1 = Prelude.take n (x:buf)
11091109 return $ Skip $ ParseChunksBuf xs s buf1 pst1
1110+ -- PR.Back 0 pst1 -> return $ Skip $ ParseChunksBuf xs s (x:buf) pst1
11101111 PR.Back n pst1 -> do
11111112 assert (n <= length (x:buf)) (return ())
11121113 let (src0, buf1) = splitAt n (x:buf)
11131114 src = Prelude.reverse src0 ++ xs
11141115 return $ Skip $ ParseChunksBuf src s buf1 pst1
1115− PR.Hold pst1 ->
1116− return $ Skip $ ParseChunksBuf xs s (x:buf) pst1
1117− PR.Halt pst1 -> do
1116+ -- XXX have 0 case
1117+ PR.Halt n pst1 -> do
11181118 res <- extract pst1
11191119 case res of
11201120 Left err -> error err
1121− -- XXX have (0,a) case
1122− Right (n, a) -> do
1121+ Right a -> do
11231122 assert (n <= length (x:buf)) (return ())
11241123 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
11251124 return $ Skip $ ParseChunksYield a (ParseChunksInit src s)