diff --git a/bench/Main.purs b/bench/Main.purs index a83067f..49fc051 100644 --- a/bench/Main.purs +++ b/bench/Main.purs @@ -207,9 +207,8 @@ main = do $ \_ -> runParser string23_1000 $ sepByRec anyChar (char '3') log "

sepBy 10000

" - -- sepBy not stack-safe - -- htmlTableWrap "runParser sepBy 10000" $ benchWith 50 - -- $ \_ -> runParser string23_10000 $ sepBy anyChar (char '3') + htmlTableWrap "runParser sepBy 10000" $ benchWith 50 + $ \_ -> runParser string23_10000 $ sepBy anyChar (char '3') htmlTableWrap "runParser sepByRec 10000" $ benchWith 50 $ \_ -> runParser string23_10000 $ sepByRec anyChar (char '3') @@ -226,9 +225,8 @@ main = do $ \_ -> runParser string23_1000 $ chainrRec anyChar (pure const) 'x' log "

chainr 10000

" - -- chainr not stack-safe - -- htmlTableWrap "runParser chainr 10000" $ benchWith 5 - -- $ \_ -> runParser string23_10000 $ chainr anyChar (pure const) 'x' + htmlTableWrap "runParser chainr 10000" $ benchWith 5 + $ \_ -> runParser string23_10000 $ chainr anyChar (pure const) 'x' htmlTableWrap "runParser chainrRec 10000" $ benchWith 5 $ \_ -> runParser string23_10000 $ chainrRec anyChar (pure const) 'x' @@ -243,14 +241,12 @@ main = do $ \_ -> runParser string23_1000x $ manyTillRec_ anyChar (char 'x') log "

manyTill 10000

" - -- manyTill not stack-safe - -- htmlTableWrap "runParser manyTill 10000" $ benchWith 50 - -- $ \_ -> runParser string23_10000x $ manyTill anyChar (char 'x') + htmlTableWrap "runParser manyTill 10000" $ benchWith 50 + $ \_ -> runParser string23_10000x $ manyTill anyChar (char 'x') htmlTableWrap "runParser manyTillRec 10000" $ benchWith 50 $ \_ -> runParser string23_10000x $ manyTillRec anyChar (char 'x') - -- manyTill_ not stack-safe - -- htmlTableWrap "runParser manyTill_ 10000" $ benchWith 50 - -- $ \_ -> runParser string23_10000x $ manyTill_ anyChar (char 'x') + htmlTableWrap "runParser manyTill_ 10000" $ benchWith 50 + $ \_ -> runParser string23_10000x $ manyTill_ anyChar (char 'x') htmlTableWrap "runParser manyTillRec_ 10000" $ benchWith 50 $ \_ -> runParser string23_10000x $ manyTillRec_ anyChar (char 'x') diff --git a/src/Parsing.purs b/src/Parsing.purs index d479d6f..384f679 100644 --- a/src/Parsing.purs +++ b/src/Parsing.purs @@ -220,9 +220,10 @@ instance Bind (ParserT s m) where ( mkFn5 \state1 more lift throw done -> more \_ -> runFn5 k1 state1 more lift throw - ( mkFn2 \state2 a -> do - let (ParserT k2) = next a - runFn5 k2 state2 more lift throw done + ( mkFn2 \state2 a -> + more \_ -> do + let (ParserT k2) = next a + runFn5 k2 state2 more lift throw done ) ) @@ -317,10 +318,11 @@ instance Alt (ParserT s m) where more \_ -> runFn5 k1 (ParseState input pos false) more lift ( mkFn2 \state2@(ParseState _ _ consumed) err -> - if consumed then - runFn2 throw state2 err - else - runFn5 k2 state1 more lift throw done + more \_ -> + if consumed then + runFn2 throw state2 err + else + runFn5 k2 state1 more lift throw done ) done )