@@ -704,7 +704,10 @@ parseBreakK (PRD.Parser pstep initial extract) stream = do
704704 str = K.cons arr0 (K.cons arr1 st)
705705 return (Right b, str)
706706 PR.Error err -> do
707− let str = K.cons (Array contents cur end) stream
707+ let n = Prelude.length backBuf
708+ arr0 = A.fromListN n (Prelude.reverse backBuf)
709+ arr1 = Array contents cur end
710+ str = K.cons arr0 (K.cons arr1 stream)
708711 return (Left (ParseError err), str)
709712
710713 -- This is a simplified goArray
@@ -746,7 +749,10 @@ parseBreakK (PRD.Parser pstep initial extract) stream = do
746749 str = K.cons arr0 (K.fromPure arr1)
747750 return (Right b, str)
748751 PR.Error err -> do
749− let str = K.fromPure (Array contents cur end)
752+ let n = Prelude.length backBuf
753+ arr0 = A.fromListN n (Prelude.reverse backBuf)
754+ arr1 = Array contents cur end
755+ str = K.cons arr0 (K.cons arr1 stream)
750756 return (Left (ParseError err), str)
751757
752758 -- This is a simplified goExtract
@@ -771,8 +777,10 @@ parseBreakK (PRD.Parser pstep initial extract) stream = do
771777 -- arr0 = A.fromListRevN n src0
772778 arr0 = A.fromListN n (Prelude.reverse src0)
773779 return (Right b, K.fromPure arr0)
774− PR.Error err ->
775− return (Left (ParseError err), K.nil)
780+ PR.Error err -> do
781+ let n = Prelude.length backBuf
782+ arr0 = A.fromListN n (Prelude.reverse backBuf)
783+ return (Left (ParseError err), K.fromPure arr0)
776784
777785-- | Parse an array stream using the supplied 'Parser'. Returns the parse
778786-- result and the unconsumed stream. Throws 'ParseError' if the parse fails.
@@ -866,7 +874,9 @@ runArrayParserDBreak
866874 src = Prelude.reverse src0 ++ xs
867875 return (Right b, D.append (D.fromList src) (D.Stream step s))
868876 PR.Error err -> do
869− let strm = D.append (D.fromList (x:xs)) (D.Stream step s)
877+ let src0 = x:getList backBuf
878+ src = Prelude.reverse src0 ++ x:xs
879+ strm = D.append (D.fromList src) (D.Stream step s)
870880 return (Left (ParseError err), strm)
871881
872882 -- This is a simplified gobuf
@@ -901,8 +911,10 @@ runArrayParserDBreak
901911 let src0 = takeArrayListRev n (x:getList backBuf)
902912 src = Prelude.reverse src0 ++ xs
903913 return (Right b, D.fromList src)
904− PR.Error err ->
905− return (Left (ParseError err), D.fromList (x:xs))
914+ PR.Error err -> do
915+ let src0 = getList backBuf
916+ src = Prelude.reverse src0 ++ x:xs
917+ return (Left (ParseError err), D.fromList src)
906918
907919 -- This is a simplified goExtract
908920 {-# INLINE goStop #-}
@@ -927,8 +939,10 @@ runArrayParserDBreak
927939 let src0 = takeArrayListRev n (getList backBuf)
928940 src = Prelude.reverse src0
929941 return (Right b, D.fromList src)
930− PR.Error err ->
931− return (Left (ParseError err), D.nil)
942+ PR.Error err -> do
943+ let src0 = getList backBuf
944+ src = Prelude.reverse src0
945+ return (Left (ParseError err), D.fromList src)
932946
933947{-
934948-- | Parse an array stream using the supplied 'Parser'. Returns the parse