@@ -13,6 +13,7 @@ import Control.Monad.State (State, lift, modify, runState)
1313import  Data.Array  (some , toUnfoldable )
1414import  Data.Array  as  Array 
1515import  Data.Bifunctor  (lmap , rmap )
16+ import  Data.CodePoint.Unicode  (isSpace )
1617import  Data.CodePoint.Unicode  as  CodePoint.Unicode 
1718import  Data.Either  (Either (..), either , fromLeft , hush )
1819import  Data.Foldable  (oneOf )
@@ -36,7 +37,7 @@ import Effect.Console (log, logShow)
3637import  Effect.Unsafe  (unsafePerformEffect )
3738import  Node.Process  (lookupEnv )
3839import  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 ,  (<?>), (<??>), (<~?>))
4041import  Parsing.Combinators.Array  as  Combinators.Array 
4142import  Parsing.Expr  (Assoc (..), Operator (..), buildExprParser )
4243import  Parsing.Language  (haskellDef , haskellStyle , javaStyle )
@@ -688,6 +689,25 @@ main = do
688689  parseErrorTestPosition (string " a\n b\n c\n " " a\n b\n c\n d\n " Position  { index: 6 1 4 
689690  parseErrorTestPosition (string " \t a" " \t ab" Position  { index: 2 10 1 
690691
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 3 1 
707+           , input: " not-an-int" 
708+           } ::  Either  ParseError  (Either  {  error  ::  ParseError , input  ::  String  }  Int )
709+     }
710+ 
691711  assertEqual' " skipSpaces consumes if position advancement issue #200" 
692712    { actual: runParser "  " do 
693713        skipSpaces
0 commit comments