@@ -1147,14 +1147,15 @@ data ParseChunksState x inpBuf st pst =
1147 | ParseChunksExtract inpBuf inpBuf !pst
1147 | ParseChunksExtract inpBuf inpBuf !pst
1148 | ParseChunksYield x (ParseChunksState x inpBuf st pst)
1148 | ParseChunksYield x (ParseChunksState x inpBuf st pst)
1150+-- XXX return the remaining stream as part of the error.
1150-- XXX This is in fact parseMany1 (a la foldMany1). Do we need a parseMany as
1151-- XXX This is in fact parseMany1 (a la foldMany1). Do we need a parseMany as
1152{-# INLINE_NORMAL parseMany #-}
1153{-# INLINE_NORMAL parseMany #-}
1153parseMany
1154parseMany
1154− :: MonadThrow m
1155+ :: Monad m
1155 => PRD.Parser a m b
1156 => PRD.Parser a m b
1156 -> Stream m a
1157 -> Stream m a
1157− -> Stream m b
1158+ -> Stream m (Either ParseError b)
1158parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1159parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1159 Stream stepOuter (ParseChunksInit [] state)
1160 Stream stepOuter (ParseChunksInit [] state)
@@ -1173,8 +1174,13 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1173 return $ Skip $ ParseChunksBuf [x] s [] ps
1174 return $ Skip $ ParseChunksBuf [x] s [] ps
1174 PRD.IDone pb ->
1175 PRD.IDone pb ->
1175 let next = ParseChunksInit [x] s
1176 let next = ParseChunksInit [x] s
1176− in return $ Skip $ ParseChunksYield pb next
1177+ in return $ Skip $ ParseChunksYield (Right pb) next
1177− PRD.IError err -> throwM $ ParseError err
1178+ PRD.IError err ->
1182+ (Left (ParseError err))
1183+ (ParseChunksInitLeftOver [])
1178 Skip s -> return $ Skip $ ParseChunksInit [] s
1184 Skip s -> return $ Skip $ ParseChunksInit [] s
1179 Stop -> return Stop
1185 Stop -> return Stop
@@ -1186,8 +1192,13 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1186 return $ Skip $ ParseChunksBuf src st [] ps
1192 return $ Skip $ ParseChunksBuf src st [] ps
1187 PRD.IDone pb ->
1193 PRD.IDone pb ->
1188 let next = ParseChunksInit src st
1194 let next = ParseChunksInit src st
1189− in return $ Skip $ ParseChunksYield pb next
1195+ in return $ Skip $ ParseChunksYield (Right pb) next
1190− PRD.IError err -> throwM $ ParseError err
1196+ PRD.IError err ->
1200+ (Left (ParseError err))
1201+ (ParseChunksInitLeftOver [])
1192 -- This is simplified ParseChunksInit
1203 -- This is simplified ParseChunksInit
1193 stepOuter _ (ParseChunksInitBuf src) = do
1204 stepOuter _ (ParseChunksInitBuf src) = do
@@ -1197,8 +1208,13 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1197 return $ Skip $ ParseChunksExtract src [] ps
1208 return $ Skip $ ParseChunksExtract src [] ps
1198 PRD.IDone pb ->
1209 PRD.IDone pb ->
1199 let next = ParseChunksInitBuf src
1210 let next = ParseChunksInitBuf src
1200− in return $ Skip $ ParseChunksYield pb next
1211+ in return $ Skip $ ParseChunksYield (Right pb) next
1201− PRD.IError err -> throwM $ ParseError err
1212+ PRD.IError err ->
1216+ (Left (ParseError err))
1217+ (ParseChunksInitLeftOver [])
1203 -- XXX we just discard any leftover input at the end
1219 -- XXX we just discard any leftover input at the end
1204 stepOuter _ (ParseChunksInitLeftOver _) = return Stop
1220 stepOuter _ (ParseChunksInitLeftOver _) = return Stop
@@ -1226,13 +1242,18 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1226 return $ Skip $ ParseChunksBuf src s buf1 pst1
1242 return $ Skip $ ParseChunksBuf src s buf1 pst1
1227 PR.Done 0 b -> do
1243 PR.Done 0 b -> do
1228 return $ Skip $
1244 return $ Skip $
1229− ParseChunksYield b (ParseChunksInit [] s)
1245+ ParseChunksYield (Right b) (ParseChunksInit [] s)
1230 PR.Done n b -> do
1246 PR.Done n b -> do
1231 assert (n <= length (x:buf)) (return ())
1247 assert (n <= length (x:buf)) (return ())
1232 let src = Prelude.reverse (Prelude.take n (x:buf))
1248 let src = Prelude.reverse (Prelude.take n (x:buf))
1233 return $ Skip $
1249 return $ Skip $
1234− ParseChunksYield b (ParseChunksInit src s)
1250+ ParseChunksYield (Right b) (ParseChunksInit src s)
1235− PR.Error err -> throwM $ ParseError err
1255+ (Left (ParseError err))
1256+ (ParseChunksInitLeftOver [])
1236 Skip s -> return $ Skip $ ParseChunksStream s buf pst
1257 Skip s -> return $ Skip $ ParseChunksStream s buf pst
1237 Stop -> return $ Skip $ ParseChunksStop buf pst
1258 Stop -> return $ Skip $ ParseChunksStop buf pst
@@ -1259,12 +1280,20 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1259 src = Prelude.reverse src0 ++ xs
1280 src = Prelude.reverse src0 ++ xs
1260 return $ Skip $ ParseChunksBuf src s buf1 pst1
1281 return $ Skip $ ParseChunksBuf src s buf1 pst1
1261 PR.Done 0 b ->
1282 PR.Done 0 b ->
1262− return $ Skip $ ParseChunksYield b (ParseChunksInit xs s)
1285+ $ ParseChunksYield (Right b) (ParseChunksInit xs s)
1263 PR.Done n b -> do
1286 PR.Done n b -> do
1264 assert (n <= length (x:buf)) (return ())
1287 assert (n <= length (x:buf)) (return ())
1265 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1288 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1266− return $ Skip $ ParseChunksYield b (ParseChunksInit src s)
1290+ $ ParseChunksYield (Right b) (ParseChunksInit src s)
1267− PR.Error err -> throwM $ ParseError err
1295+ (Left (ParseError err))
1296+ (ParseChunksInitLeftOver [])
1269 -- This is simplified ParseChunksBuf
1298 -- This is simplified ParseChunksBuf
1270 stepOuter _ (ParseChunksExtract [] buf pst) =
1299 stepOuter _ (ParseChunksExtract [] buf pst) =
@@ -1288,12 +1317,21 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1288 src = Prelude.reverse src0 ++ xs
1317 src = Prelude.reverse src0 ++ xs
1289 return $ Skip $ ParseChunksExtract src buf1 pst1
1318 return $ Skip $ ParseChunksExtract src buf1 pst1
1290 PR.Done 0 b ->
1319 PR.Done 0 b ->
1291− return $ Skip $ ParseChunksYield b (ParseChunksInitBuf xs)
1322+ $ ParseChunksYield (Right b) (ParseChunksInitBuf xs)
1292 PR.Done n b -> do
1323 PR.Done n b -> do
1293 assert (n <= length (x:buf)) (return ())
1324 assert (n <= length (x:buf)) (return ())
1294 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1325 let src = Prelude.reverse (Prelude.take n (x:buf)) ++ xs
1295− return $ Skip $ ParseChunksYield b (ParseChunksInitBuf src)
1328+ $ ParseChunksYield (Right b) (ParseChunksInitBuf src)
1296− PR.Error err -> throwM $ ParseError err
1333+ (Left (ParseError err))
1334+ (ParseChunksInitLeftOver [])
1298 -- This is simplified ParseChunksExtract
1336 -- This is simplified ParseChunksExtract
1299 stepOuter _ (ParseChunksStop buf pst) = do
1337 stepOuter _ (ParseChunksStop buf pst) = do
@@ -1309,13 +1347,18 @@ parseMany (PRD.Parser pstep initial extract) (Stream step state) =
1309 return $ Skip $ ParseChunksExtract src buf1 pst1
1347 return $ Skip $ ParseChunksExtract src buf1 pst1
1310 PR.Done 0 b -> do
1348 PR.Done 0 b -> do
1311 return $ Skip $
1349 return $ Skip $
1312− ParseChunksYield b (ParseChunksInitLeftOver [])
1350+ ParseChunksYield (Right b) (ParseChunksInitLeftOver [])
1313 PR.Done n b -> do
1351 PR.Done n b -> do
1314 assert (n <= length buf) (return ())
1352 assert (n <= length buf) (return ())
1315 let src = Prelude.reverse (Prelude.take n buf)
1353 let src = Prelude.reverse (Prelude.take n buf)
1316 return $ Skip $
1354 return $ Skip $
1317− ParseChunksYield b (ParseChunksInitBuf src)
1355+ ParseChunksYield (Right b) (ParseChunksInitBuf src)
1318− PR.Error err -> throwM $ ParseError err
1360+ (Left (ParseError err))
1361+ (ParseChunksInitLeftOver [])
1320 stepOuter _ (ParseChunksYield a next) = return $ Yield a next
1363 stepOuter _ (ParseChunksYield a next) = return $ Yield a next