@@ -704,7 +704,10 @@ parseBreakK (PRD.Parser pstep initial extract) stream = do
704 str = K.cons arr0 (K.cons arr1 st)
704 str = K.cons arr0 (K.cons arr1 st)
705 return (Right b, str)
705 return (Right b, str)
706 PR.Error err -> do
706 PR.Error err -> do
707+ let n = Prelude.length backBuf
708+ arr0 = A.fromListN n (Prelude.reverse backBuf)
707− let str = K.cons (Array contents cur end) stream
709+ arr1 = Array contents cur end
710+ str = K.cons arr0 (K.cons arr1 stream)
708 return (Left (ParseError err), str)
711 return (Left (ParseError err), str)
710 -- This is a simplified goArray
713 -- This is a simplified goArray
@@ -746,7 +749,10 @@ parseBreakK (PRD.Parser pstep initial extract) stream = do
746 str = K.cons arr0 (K.fromPure arr1)
749 str = K.cons arr0 (K.fromPure arr1)
747 return (Right b, str)
750 return (Right b, str)
748 PR.Error err -> do
751 PR.Error err -> do
752+ let n = Prelude.length backBuf
753+ arr0 = A.fromListN n (Prelude.reverse backBuf)
749− let str = K.fromPure (Array contents cur end)
754+ arr1 = Array contents cur end
755+ str = K.cons arr0 (K.cons arr1 stream)
750 return (Left (ParseError err), str)
756 return (Left (ParseError err), str)
752 -- This is a simplified goExtract
758 -- This is a simplified goExtract
@@ -771,8 +777,10 @@ parseBreakK (PRD.Parser pstep initial extract) stream = do
771 -- arr0 = A.fromListRevN n src0
777 -- arr0 = A.fromListRevN n src0
772 arr0 = A.fromListN n (Prelude.reverse src0)
778 arr0 = A.fromListN n (Prelude.reverse src0)
773 return (Right b, K.fromPure arr0)
779 return (Right b, K.fromPure arr0)
774− PR.Error err ->
780+ PR.Error err -> do
781+ let n = Prelude.length backBuf
782+ arr0 = A.fromListN n (Prelude.reverse backBuf)
775− return (Left (ParseError err), K.nil)
783+ return (Left (ParseError err), K.fromPure arr0)
777-- | Parse an array stream using the supplied 'Parser'. Returns the parse
785-- | Parse an array stream using the supplied 'Parser'. Returns the parse
778-- result and the unconsumed stream. Throws 'ParseError' if the parse fails.
786-- result and the unconsumed stream. Throws 'ParseError' if the parse fails.
@@ -866,7 +874,9 @@ runArrayParserDBreak
866 src = Prelude.reverse src0 ++ xs
874 src = Prelude.reverse src0 ++ xs
867 return (Right b, D.append (D.fromList src) (D.Stream step s))
875 return (Right b, D.append (D.fromList src) (D.Stream step s))
868 PR.Error err -> do
876 PR.Error err -> do
877+ let src0 = x:getList backBuf
878+ src = Prelude.reverse src0 ++ x:xs
869− let strm = D.append (D.fromList (x:xs)) (D.Stream step s)
879+ strm = D.append (D.fromList src) (D.Stream step s)
870 return (Left (ParseError err), strm)
880 return (Left (ParseError err), strm)
872 -- This is a simplified gobuf
882 -- This is a simplified gobuf
@@ -901,8 +911,10 @@ runArrayParserDBreak
901 let src0 = takeArrayListRev n (x:getList backBuf)
911 let src0 = takeArrayListRev n (x:getList backBuf)
902 src = Prelude.reverse src0 ++ xs
912 src = Prelude.reverse src0 ++ xs
903 return (Right b, D.fromList src)
913 return (Right b, D.fromList src)
904− PR.Error err ->
914+ PR.Error err -> do
915+ let src0 = getList backBuf
916+ src = Prelude.reverse src0 ++ x:xs
905− return (Left (ParseError err), D.fromList (x:xs))
917+ return (Left (ParseError err), D.fromList src)
907 -- This is a simplified goExtract
919 -- This is a simplified goExtract
908 {-# INLINE goStop #-}
920 {-# INLINE goStop #-}
@@ -927,8 +939,10 @@ runArrayParserDBreak
927 let src0 = takeArrayListRev n (getList backBuf)
939 let src0 = takeArrayListRev n (getList backBuf)
928 src = Prelude.reverse src0
940 src = Prelude.reverse src0
929 return (Right b, D.fromList src)
941 return (Right b, D.fromList src)
930− PR.Error err ->
942+ PR.Error err -> do
943+ let src0 = getList backBuf
944+ src = Prelude.reverse src0
931− return (Left (ParseError err), D.nil)
945+ return (Left (ParseError err), D.fromList src)
934-- | Parse an array stream using the supplied 'Parser'. Returns the parse
948-- | Parse an array stream using the supplied 'Parser'. Returns the parse