@@ -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