@@ -13,6 +13,7 @@ import Control.Monad.State (State, lift, modify, runState)
13
13
import Data.Array (some , toUnfoldable )
14
14
import Data.Array as Array
15
15
import Data.Bifunctor (lmap , rmap )
16
+ import Data.CodePoint.Unicode (isSpace )
16
17
import Data.CodePoint.Unicode as CodePoint.Unicode
17
18
import Data.Either (Either (..), either , fromLeft , hush )
18
19
import Data.Foldable (oneOf )
@@ -36,7 +37,7 @@ import Effect.Console (log, logShow)
36
37
import Effect.Unsafe (unsafePerformEffect )
37
38
import Node.Process (lookupEnv )
38
39
import Parsing (ParseError (..), ParseState (..), Parser , ParserT , Position (..), consume , fail , getParserT , initialPos , parseErrorMessage , parseErrorPosition , position , region , runParser )
39
- import Parsing.Combinators (advance , between , chainl , chainl1 , chainr , chainr1 , choice , empty , endBy , endBy1 , lookAhead , many , many1 , many1Till , many1Till_ , manyIndex , manyTill , manyTill_ , notFollowedBy , optionMaybe , replicateA , sepBy , sepBy1 , sepEndBy , sepEndBy1 , skipMany , skipMany1 , try , tryRethrow , (<?>), (<??>), (<~?>))
40
+ import Parsing.Combinators (advance , between , chainl , chainl1 , chainr , chainr1 , choice , empty , endBy , endBy1 , lookAhead , many , many1 , many1Till , many1Till_ , manyIndex , manyTill , manyTill_ , notFollowedBy , optionMaybe , replicateA , sepBy , sepBy1 , sepEndBy , sepEndBy1 , skipMany , skipMany1 , try , tryRethrow , withRecovery , (<?>), (<??>), (<~?>))
40
41
import Parsing.Combinators.Array as Combinators.Array
41
42
import Parsing.Expr (Assoc (..), Operator (..), buildExprParser )
42
43
import Parsing.Language (haskellDef , haskellStyle , javaStyle )
@@ -688,6 +689,25 @@ main = do
688
689
parseErrorTestPosition (string " a\n b\n c\n " *> eof) " a\n b\n c\n d\n " (Position { index: 6 , column: 1 , line: 4 })
689
690
parseErrorTestPosition (string " \t a" *> eof) " \t ab" (Position { index: 2 , column: 10 , line: 1 })
690
691
692
+ assertEqual' " withRecovery1"
693
+ { actual: runParser " not-an-int here" do
694
+ _ <- takeWhile isSpace
695
+ withRecovery
696
+ ( \err -> do
697
+ nonint <- takeWhile (not <<< isSpace)
698
+ pure $ Left
699
+ { error: err
700
+ , input: nonint
701
+ }
702
+ )
703
+ (Right <$> intDecimal)
704
+ , expected:
705
+ Right $ Left
706
+ { error: ParseError " Expected Int" (Position { index: 2 , column: 3 , line: 1 })
707
+ , input: " not-an-int"
708
+ } :: Either ParseError (Either { error :: ParseError , input :: String } Int )
709
+ }
710
+
691
711
assertEqual' " skipSpaces consumes if position advancement issue #200"
692
712
{ actual: runParser " " do
693
713
skipSpaces
0 commit comments