Skip to content

Commit f7fe809

Browse files
committed
Fix the extract bugs in the parser modules
1 parent 2f92f68 commit f7fe809

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

core/src/Streamly/Internal/Data/Parser.hs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -875,12 +875,13 @@ takeWhileP predicate (Parser pstep pinitial pextract) =
875875
if predicate a
876876
then pstep s a
877877
else do
878+
-- In this case when converting Final to Step we don't add 1 as we
879+
-- don't consume the current element.
878880
r <- pextract s
879-
-- XXX need a map on count
880881
case r of
881882
FError err -> return $ Error err
882-
FDone n s1 -> return $ SDone (n - 1) s1
883-
FContinue n s1 -> return $ SContinue (n - 1) s1
883+
FDone n s1 -> return $ SDone n s1
884+
FContinue n s1 -> return $ SContinue n s1
884885

885886
-- | Collect stream elements until an element fails the predicate. The element
886887
-- on which the predicate fails is returned back to the input stream.
@@ -1297,8 +1298,8 @@ takeEndBy_ cond (Parser pstep pinitial pextract) =
12971298
then do
12981299
res <- pextract s
12991300
pure $ case res of
1300-
FDone n b -> SDone n b
1301-
FContinue n s1 -> SPartial n s1
1301+
FDone n b -> SDone (n + 1) b
1302+
FContinue n s1 -> SPartial (n + 1) s1
13021303
FError err -> Error err
13031304
else pstep s a
13041305

@@ -2466,10 +2467,9 @@ takeP lim (Parser pstep pinitial pextract) = Parser step initial extract
24662467
then return $ SPartial 1 $ Tuple' cnt1 s
24672468
else do
24682469
r1 <- pextract s
2469-
-- Add tests here: Shouldn't we add 1?
24702470
return $ case r1 of
2471-
FDone n b -> SDone n b
2472-
FContinue n s1 -> SContinue n (Tuple' (cnt1 + n) s1)
2471+
FDone n b -> SDone (n + 1) b
2472+
FContinue n s1 -> SContinue (n + 1) (Tuple' (cnt1 + n) s1)
24732473
FError err -> Error err
24742474

24752475
SContinue 1 s -> do
@@ -2479,10 +2479,9 @@ takeP lim (Parser pstep pinitial pextract) = Parser step initial extract
24792479
then return $ SContinue 1 $ Tuple' cnt1 s
24802480
else do
24812481
r1 <- pextract s
2482-
-- XXX Check. Shouldn't we add 1?
24832482
return $ case r1 of
2484-
FDone n b -> SDone n b
2485-
FContinue n s1 -> SContinue n (Tuple' (cnt1 + n) s1)
2483+
FDone n b -> SDone (n + 1) b
2484+
FContinue n s1 -> SContinue (n + 1) (Tuple' (cnt1 + n) s1)
24862485
FError err -> Error err
24872486
SPartial n s -> do
24882487
let taken = cnt + n

0 commit comments

Comments
 (0)