megaparsec-tests 9.3.0 → 9.3.1
raw patch · 6 files changed
+125/−121 lines, 6 filesdep ~megaparsecPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: megaparsec
API changes (from Hackage documentation)
Files
- megaparsec-tests.cabal +3/−3
- src/Test/Hspec/Megaparsec/AdHoc.hs +12/−12
- tests/Text/Megaparsec/DebugSpec.hs +6/−6
- tests/Text/Megaparsec/ErrorSpec.hs +16/−12
- tests/Text/Megaparsec/StreamSpec.hs +1/−1
- tests/Text/MegaparsecSpec.hs +87/−87
megaparsec-tests.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: megaparsec-tests-version: 9.3.0+version: 9.3.1 license: BSD-2-Clause license-file: LICENSE.md maintainer: Mark Karpov <markkarpov92@gmail.com>@@ -31,7 +31,7 @@ hspec >=2.0 && <3.0, hspec-expectations >=0.8 && <0.9, hspec-megaparsec >=2.0 && <3.0,- megaparsec ==9.3.0,+ megaparsec ==9.3.1, mtl >=2.2.2 && <3.0, text >=0.2 && <2.1, transformers >=0.4 && <0.7@@ -71,7 +71,7 @@ hspec >=2.0 && <3.0, hspec-expectations >=0.8 && <0.9, hspec-megaparsec >=2.0 && <3.0,- megaparsec ==9.3.0,+ megaparsec ==9.3.1, megaparsec-tests, mtl >=2.2.2 && <3.0, parser-combinators >=1.0 && <2.0,
src/Test/Hspec/Megaparsec/AdHoc.hs view
@@ -121,7 +121,7 @@ -- all supported monads transformers in turn). grs :: -- | Parser to run- (forall m. MonadParsecDbg Void String m => m a) ->+ (forall m. (MonadParsecDbg Void String m) => m a) -> -- | Input for the parser String -> -- | How to check result of parsing@@ -141,7 +141,7 @@ -- | 'grs'' to 'grs' is as 'prs'' to 'prs'. grs' :: -- | Parser to run- (forall m. MonadParsecDbg Void String m => m a) ->+ (forall m. (MonadParsecDbg Void String m) => m a) -> -- | Input for the parser String -> -- | How to check result of parsing@@ -158,18 +158,18 @@ r (prs' (evalRWSTL p) s) r (prs' (evalRWSTS p) s) -evalWriterTL :: Monad m => L.WriterT [Int] m a -> m a+evalWriterTL :: (Monad m) => L.WriterT [Int] m a -> m a evalWriterTL = fmap fst . L.runWriterT -evalWriterTS :: Monad m => S.WriterT [Int] m a -> m a+evalWriterTS :: (Monad m) => S.WriterT [Int] m a -> m a evalWriterTS = fmap fst . S.runWriterT -evalRWSTL :: Monad m => L.RWST () [Int] () m a -> m a+evalRWSTL :: (Monad m) => L.RWST () [Int] () m a -> m a evalRWSTL m = do (a, _, _) <- L.runRWST m () () return a -evalRWSTS :: Monad m => S.RWST () [Int] () m a -> m a+evalRWSTS :: (Monad m) => S.RWST () [Int] () m a -> m a evalRWSTS m = do (a, _, _) <- S.runRWST m () () return a@@ -201,11 +201,11 @@ prs_ p s `shouldParse` s' -- | Get tab width from 'PosState'. Use with care only for testing.-getTabWidth :: MonadParsec e s m => m Pos+getTabWidth :: (MonadParsec e s m) => m Pos getTabWidth = pstateTabWidth . statePosState <$> getParserState -- | Set tab width in 'PosState'. Use with care only for testing.-setTabWidth :: MonadParsec e s m => Pos -> m ()+setTabWidth :: (MonadParsec e s m) => Pos -> m () setTabWidth w = updateParserState $ \st -> let pst = statePosState st in st {statePosState = pst {pstateTabWidth = w}}@@ -277,7 +277,7 @@ <*> arbitrary <*> arbitrary -instance Arbitrary t => Arbitrary (ErrorItem t) where+instance (Arbitrary t) => Arbitrary (ErrorItem t) where arbitrary = oneof [ Tokens <$> (NE.fromList . getNonEmpty <$> arbitrary),@@ -307,7 +307,7 @@ <*> (E.fromList <$> scaleDown arbitrary) ] -instance Arbitrary s => Arbitrary (State s e) where+instance (Arbitrary s) => Arbitrary (State s e) where arbitrary = do input <- scaleDown arbitrary offset <- choose (1, 10000)@@ -324,7 +324,7 @@ stateParseErrors = [] } -instance Arbitrary s => Arbitrary (PosState s) where+instance (Arbitrary s) => Arbitrary (PosState s) where arbitrary = PosState <$> arbitrary@@ -345,5 +345,5 @@ instance Arbitrary BL.ByteString where arbitrary = BL.pack <$> arbitrary -instance Arbitrary a => Arbitrary (NonEmpty a) where+instance (Arbitrary a) => Arbitrary (NonEmpty a) where arbitrary = NE.fromList <$> (arbitrary `suchThat` (not . null))
tests/Text/Megaparsec/DebugSpec.hs view
@@ -30,14 +30,14 @@ describe "dbg" $ do context "when inner parser succeeds consuming input" $ do it "has no effect on how parser works" $ do- let p :: MonadParsecDbg Void String m => m Char+ let p :: (MonadParsecDbg Void String m) => m Char p = dbg "char" (char 'a') s = "ab" shouldStderr p s "char> IN: \"ab\"\nchar> MATCH (COK): 'a'\nchar> VALUE: 'a'\n\n" grs p s (`shouldParse` 'a') grs' p s (`succeedsLeaving` "b") it "its hints are preserved" $ do- let p :: MonadParsecDbg Void String m => m String+ let p :: (MonadParsecDbg Void String m) => m String p = dbg "many chars" (many (char 'a')) <* empty s = "abcd" shouldStderr p s "many chars> IN: \"abcd\"\nmany chars> MATCH (COK): 'a'\nmany chars> VALUE: \"a\"\n\n"@@ -45,7 +45,7 @@ grs' p s (`failsLeaving` "bcd") context "when inner parser fails consuming input" $ it "has no effect on how parser works" $ do- let p :: MonadParsecDbg Void String m => m Char+ let p :: (MonadParsecDbg Void String m) => m Char p = dbg "chars" (char 'a' *> char 'c') s = "abc" shouldStderr p s "chars> IN: \"abc\"\nchars> MATCH (CERR): 'a'\nchars> ERROR:\nchars> offset=1:\nchars> unexpected 'b'\nchars> expecting 'c'\n\n"@@ -53,14 +53,14 @@ grs' p s (`failsLeaving` "bc") context "when inner parser succeeds without consuming" $ do it "has no effect on how parser works" $ do- let p :: MonadParsecDbg Void String m => m Char+ let p :: (MonadParsecDbg Void String m) => m Char p = dbg "return" (return 'a') s = "abc" shouldStderr p s "return> IN: \"abc\"\nreturn> MATCH (EOK): <EMPTY>\nreturn> VALUE: 'a'\n\n" grs p s (`shouldParse` 'a') grs' p s (`succeedsLeaving` s) it "its hints are preserved" $ do- let p :: MonadParsecDbg Void String m => m String+ let p :: (MonadParsecDbg Void String m) => m String p = dbg "many chars" (many (char 'a')) <* empty s = "bcd" shouldStderr p s "many chars> IN: \"bcd\"\nmany chars> MATCH (EOK): <EMPTY>\nmany chars> VALUE: \"\"\n\n"@@ -68,7 +68,7 @@ grs' p s (`failsLeaving` "bcd") context "when inner parser fails without consuming" $ it "has no effect on how parser works" $ do- let p :: MonadParsecDbg Void String m => m ()+ let p :: (MonadParsecDbg Void String m) => m () p = dbg "empty" (void empty) s = "abc" shouldStderr p s "empty> IN: \"abc\"\nempty> MATCH (EERR): <EMPTY>\nempty> ERROR:\nempty> offset=0:\nempty> unknown parse error\n\n"
tests/Text/Megaparsec/ErrorSpec.hs view
@@ -167,9 +167,12 @@ errorBundlePretty bundle `shouldBe` "1:10:\n |\n1 | foo\n | \nunexpected 'o'\nexpecting 'x'\n" it "takes tab width into account correctly" $- property $ \w' -> do- let s = "\tsomething\t" :: String- pe = err 1 (utok 's' <> etok 'x') :: PE+ property $ \w' i' -> do+ let w = unPos w'+ i = unPos i' `rem` (w * 2)+ as = replicate i 'a'+ s = "\t" ++ as ++ "\tb" :: String+ pe = err (2 + i) (utok 'b' <> etok 'x') :: PE bundle = ParseErrorBundle { bundleErrors = pe :| [],@@ -182,18 +185,19 @@ pstateLinePrefix = "" } }- w = unPos w'- tabRep = replicate w ' '+ secondTabApparentWidth = w - (i `rem` w)+ errColumn = w + i + secondTabApparentWidth errorBundlePretty bundle `shouldBe` ( "1:"- ++ show (w + 1)+ ++ show (errColumn + 1) ++ ":\n |\n1 | "- ++ tabRep- ++ "something"- ++ tabRep+ ++ replicate w ' '+ ++ as+ ++ replicate secondTabApparentWidth ' '+ ++ "b" ++ "\n | "- ++ tabRep- ++ "^\nunexpected 's'\nexpecting 'x'\n"+ ++ replicate errColumn ' '+ ++ "^\nunexpected 'b'\nexpecting 'x'\n" ) it "displays multi-error bundle correctly" $ do let s = "something\ngood\n" :: String@@ -266,7 +270,7 @@ type PE = ParseError String Void -contains :: Foldable t => (PE -> t a) -> (a -> String) -> PE -> Property+contains :: (Foldable t) => (PE -> t a) -> (a -> String) -> PE -> Property contains g r e = property (all f (g e)) where rendered = parseErrorPretty e
tests/Text/Megaparsec/StreamSpec.hs view
@@ -496,7 +496,7 @@ } (r, _) = reachOffset 2 pst w = unPos (pstateTabWidth pst)- r' = replicate (w * 2) ' ' ++ "a" ++ replicate w ' '+ r' = replicate (w * 2) ' ' ++ "a" ++ replicate (max 1 (w - 1)) ' ' r `shouldBe` Just r' it "returns correct line (with line prefix)" $ property $ \pst' -> do
tests/Text/MegaparsecSpec.hs view
@@ -422,7 +422,7 @@ describe "parseError" $ do it "immediately fails with given parse error" $ property $ \st e -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = parseError e runParser' p st `shouldBe` (st, Left (mkBundle st (nes e))) @@ -432,7 +432,7 @@ it "collection of hints remains empty" $ property $ \lbl a -> not (null lbl) ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = label lbl (char a) <* empty s = [a] grs p s (`shouldFailWith` err 1 mempty)@@ -441,7 +441,7 @@ it "does not alter the hints" $ property $ \lbl a -> not (null lbl) ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = label lbl (many (char a)) <* empty s = [a] grs p s (`shouldFailWith` err 1 (etok a))@@ -450,7 +450,7 @@ it "reports parse error without modification" $ property $ \lbl a b c -> not (null lbl) && b /= c ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = label lbl (char a *> char b) s = [a, c] grs p s (`shouldFailWith` err 1 (utok c <> etok b))@@ -460,28 +460,28 @@ it "collection of hints remains empty" $ property $ \lbl a -> not (null lbl) ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = label lbl (return a) <* empty grs p "" (`shouldFailWith` err 0 mempty) context "inner parser produces hints" $ it "replaces the last hint with given label" $ property $ \lbl a -> not (null lbl) ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = label lbl (many (char a)) <* empty grs p "" (`shouldFailWith` err 0 (elabel lbl)) context "when inner parser fails without consuming" $ do it "is mentioned in parse error via its label" $ property $ \lbl -> not (null lbl) ==> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = label lbl empty grs p "" (`shouldFailWith` err 0 (elabel lbl)) context "when inner parser is composite with 2-hint sources" $ it "both hint groups are replaced by the label" $ property $ \lbl a b -> not (null lbl) && a /= b ==> do- let p :: MonadParsec Void String m => m (Maybe Char)+ let p :: (MonadParsec Void String m) => m (Maybe Char) p = label lbl (optional (char a) *> optional (char b)) <* empty grs p "" (`shouldFailWith` err 0 (elabel lbl)) describe "hidden" $ do@@ -489,7 +489,7 @@ context "inner parser does not produce any hints" $ it "collection of hints remains empty" $ property $ \a -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = hidden (char a) <* empty s = [a] grs p s (`shouldFailWith` err 1 mempty)@@ -497,7 +497,7 @@ context "inner parser produces hints" $ it "hides the parser in the error message" $ property $ \a -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = hidden (many (char a)) <* empty s = [a] grs p s (`shouldFailWith` err 1 mempty)@@ -506,7 +506,7 @@ it "reports parse error without modification" $ property $ \a b c -> b /= c ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = hidden (char a *> char b) s = [a, c] grs p s (`shouldFailWith` err 1 (utok c <> etok b))@@ -515,19 +515,19 @@ context "inner parser does not produce any hints" $ it "collection of hints remains empty" $ property $ \a -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = hidden (return a) <* empty grs p "" (`shouldFailWith` err 0 mempty) context "inner parser produces hints" $ it "hides the parser in the error message" $ property $ \a -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = hidden (many (char a)) <* empty grs p "" (`shouldFailWith` err 0 mempty) context "when inner parser fails without consuming" $ it "hides the parser in the error message" $ do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = hidden empty grs p "" (`shouldFailWith` err 0 mempty) @@ -535,7 +535,7 @@ context "when inner parser succeeds consuming" $ it "try has no effect" $ property $ \a -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = try (char a) s = [a] grs p s (`shouldParse` a)@@ -544,7 +544,7 @@ it "backtracks, it appears as if the parser has not consumed anything" $ property $ \a b c -> b /= c ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = try (char a *> char b) s = [a, c] grs p s (`shouldFailWith` err 1 (utok c <> etok b))@@ -552,7 +552,7 @@ it "hints from the inner parse error do not leak" $ property $ \a b c -> b /= c ==> do- let p :: MonadParsec Void String m => m (Maybe Char)+ let p :: (MonadParsec Void String m) => m (Maybe Char) p = (optional . try) (char a *> char b) <* empty s = [a, c] grs p s (`shouldFailWith` err 0 mempty)@@ -560,13 +560,13 @@ context "when inner parser succeeds without consuming" $ it "try has no effect" $ property $ \a -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = try (return a) grs p "" (`shouldParse` a) context "when inner parser fails without consuming" $ it "try backtracks parser state anyway" $ property $ \w -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = try (setTabWidth w *> empty) grs p "" (`shouldFailWith` err 0 mempty) grs' p "" ((`shouldBe` defaultTabWidth) . grabTabWidth)@@ -575,14 +575,14 @@ context "when inner parser succeeds consuming" $ do it "result is returned but parser state is not changed" $ property $ \a w -> do- let p :: MonadParsec Void String m => m Pos+ let p :: (MonadParsec Void String m) => m Pos p = lookAhead (setTabWidth w *> char a) *> getTabWidth s = [a] grs p s (`shouldParse` defaultTabWidth) grs' p s (`succeedsLeaving` s) it "hints are not preserved" $ property $ \a -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = lookAhead (many (char a)) <* empty s = [a] grs p s (`shouldFailWith` err 0 mempty)@@ -591,7 +591,7 @@ it "error message is reported as usual" $ property $ \a b c -> b /= c ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = lookAhead (char a *> char b) s = [a, c] grs p s (`shouldFailWith` err 1 (utok c <> etok b))@@ -599,7 +599,7 @@ context "when inner parser succeeds without consuming" $ do it "result is returned but parser state in not changed" $ property $ \a w -> do- let p :: MonadParsec Void String m => m Pos+ let p :: (MonadParsec Void String m) => m Pos p = lookAhead (setTabWidth w *> char a) *> getTabWidth s = [a] grs p s (`shouldParse` defaultTabWidth)@@ -607,7 +607,7 @@ it "hints are not preserved" $ property $ \a b -> a /= b ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = lookAhead (many (char a)) <* empty s = [b] grs p s (`shouldFailWith` err 0 mempty)@@ -615,7 +615,7 @@ context "when inner parser fails without consuming" $ it "error message is reported as usual" $ do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = lookAhead empty grs p "" (`shouldFailWith` err 0 mempty) @@ -623,7 +623,7 @@ context "when inner parser succeeds consuming" $ it "signals correct parse error" $ property $ \a w -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = notFollowedBy (setTabWidth w <* char a) s = [a] grs p s (`shouldFailWith` err 0 (utok a))@@ -633,7 +633,7 @@ it "succeeds without consuming" $ property $ \a b c w -> b /= c ==> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = notFollowedBy (setTabWidth w *> char a *> char b) s = [a, c] grs' p s (`succeedsLeaving` s)@@ -641,7 +641,7 @@ it "hints are not preserved" $ property $ \a b -> a /= b ==> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = notFollowedBy (char b *> many (char a) <* char a) <* empty s = [b, b] grs p s (`shouldFailWith` err 0 mempty)@@ -649,7 +649,7 @@ context "when inner parser succeeds without consuming" $ it "signals correct parse error" $ property $ \a w -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = notFollowedBy (setTabWidth w *> return a) s = [a] grs p s (`shouldFailWith` err 0 (utok a))@@ -658,13 +658,13 @@ context "when inner parser fails without consuming" $ do it "succeeds without consuming" $ property $ \w -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = notFollowedBy (setTabWidth w *> empty) grs p "" (`shouldParse` ()) grs' p "" ((`shouldBe` defaultTabWidth) . grabTabWidth) it "hints are not preserved" $ property $ \a -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = notFollowedBy (many (char a) <* char a) <* empty s = "" grs p s (`shouldFailWith` err 0 mempty)@@ -674,7 +674,7 @@ context "when inner parser succeeds consuming" $ it "the result is returned as usual" $ property $ \a as -> do- let p :: MonadParsec Void String m => m (Maybe Char)+ let p :: (MonadParsec Void String m) => m (Maybe Char) p = withRecovery (const $ return Nothing) (pure <$> char a) s = a : as grs p s (`shouldParse` Just a)@@ -684,7 +684,7 @@ it "its result is returned and position is advanced" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ string (c : as))@@ -695,7 +695,7 @@ it "hints are not preserved" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ string (c : as))@@ -708,7 +708,7 @@ it "the original parse error (and state) is reported" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ char c <* empty)@@ -720,7 +720,7 @@ it "its result is returned (and state)" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (return . Left) (Right <$> char a <* char b) s = a : c : as grs p s (`shouldParse` Left (err 1 (utok c <> etok b)))@@ -728,7 +728,7 @@ it "original hints are preserved" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (return . Left)@@ -741,7 +741,7 @@ it "the original parse error (and state) is reported" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ empty)@@ -752,7 +752,7 @@ context "when inner parser succeeds without consuming" $ it "the result is returned as usual" $ property $ \a s -> do- let p :: MonadParsec Void String m => m (Maybe Char)+ let p :: (MonadParsec Void String m) => m (Maybe Char) p = withRecovery (const $ return Nothing) (return a) grs p s (`shouldParse` a) grs' p s (`succeedsLeaving` s)@@ -760,7 +760,7 @@ context "when recovering parser succeeds consuming input" $ it "its result is returned and position is advanced" $ property $ \a as -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ string s) empty s = a : as grs p s (`shouldParse` Left (err 0 mempty))@@ -769,7 +769,7 @@ it "the original parse error (and state) is reported" $ property $ \a b as -> a /= b ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ char a <* char b <* empty)@@ -780,14 +780,14 @@ context "when recovering parser succeeds without consuming" $ do it "its result is returned (and state)" $ property $ \s -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (return . Left) empty grs p s (`shouldParse` Left (err 0 mempty)) grs' p s (`succeedsLeaving` s) it "original hints are preserved" $ property $ \a b as -> a /= b ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) String)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) String) p = withRecovery (return . Left)@@ -799,13 +799,13 @@ context "when recovering parser fails without consuming" $ it "the original parse error (and state) is reported" $ property $ \s -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = withRecovery (\e -> Left e <$ empty) empty grs p s (`shouldFailWith` err 0 mempty) grs' p s (`failsLeaving` s) it "works in complex situations too" $ property $ \(NonNegative a) (NonNegative b) (NonNegative c) -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) String)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) String) p = let g = count' 1 3 . char in v@@ -836,7 +836,7 @@ context "when inner parser succeeds consuming" $ it "returns its result in Right" $ property $ \a as -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = observing (char a) s = a : as grs p s (`shouldParse` Right a)@@ -845,7 +845,7 @@ it "returns its parse error in Left preserving state" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = observing (char a *> char b) s = a : c : as grs p s (`shouldParse` Left (err 1 (utok c <> etok b)))@@ -853,7 +853,7 @@ it "does not create any hints" $ property $ \a b c as -> b /= c ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = observing (char a *> char b) *> empty s = a : c : as grs p s (`shouldFailWith` err 1 mempty)@@ -861,21 +861,21 @@ context "when inner parser succeeds without consuming" $ it "returns its result in Right" $ property $ \a s -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = observing (return a) grs p s (`shouldParse` Right a) grs' p s (`succeedsLeaving` s) context "when inner parser fails without consuming" $ do it "returns its parse error in Left preserving state" $ property $ \s -> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) ())+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) ()) p = observing empty grs p s (`shouldParse` Left (err 0 mempty)) grs' p s (`succeedsLeaving` s) it "creates correct hints" $ property $ \a b as -> a /= b ==> do- let p :: MonadParsec Void String m => m (Either (ParseError String Void) Char)+ let p :: (MonadParsec Void String m) => m (Either (ParseError String Void) Char) p = observing (char a) <* empty s = b : as grs p s (`shouldFailWith` err 0 (etok a))@@ -898,7 +898,7 @@ context "when supplied predicate is satisfied" $ it "succeeds" $ property $ \a as -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = token (testChar a) (expected a) s = a : as grs p s (`shouldParse` a)@@ -907,7 +907,7 @@ it "signals correct parse error" $ property $ \a b as -> a /= b ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = token (testChar b) (expected b) s = a : as us = pure (Tokens $ nes a)@@ -917,7 +917,7 @@ context "when stream is empty" $ it "signals correct parse error" $ property $ \a -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = token (testChar a) ps us = pure EndOfInput ps = expected a@@ -927,7 +927,7 @@ context "when stream is prefixed with given string" $ it "parses the string" $ property $ \str s -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = tokens (==) str s' = str ++ s grs p s' (`shouldParse` str)@@ -936,7 +936,7 @@ it "signals correct parse error" $ property $ \str s -> not (str `isPrefixOf` s) ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = tokens (==) str z = take (length str) s grs p s (`shouldFailWith` err 0 (utoks z <> etoks str))@@ -944,7 +944,7 @@ context "when matching the empty string" $ it "eok continuation is used" $ property $ \str s -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = (tokens (==) "" <* empty) <|> pure str grs p s (`shouldParse` str) grs' p s (`succeedsLeaving` s)@@ -954,19 +954,19 @@ it "consumes all matching tokens, zero or more" $ property $ \s -> not (null s) ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhileP Nothing isLetter (z, zs) = DL.span isLetter s grs p s (`shouldParse` z) grs' p s (`succeedsLeaving` zs) context "when stream is empty" $ it "succeeds returning empty chunk" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhileP Nothing isLetter grs p "" (`shouldParse` "") grs' p "" (`succeedsLeaving` "") context "with two takeWhileP in a row (testing hints)" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = do void $ takeWhileP (Just "foo") (== 'a') void $ takeWhileP (Just "bar") (== 'b')@@ -985,7 +985,7 @@ grs' p s (`failsLeaving` "") context "without label (testing hints)" $ it "there are no hints" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhileP Nothing (== 'a') <* empty s = "aaa" grs p s (`shouldFailWith` err 3 mempty)@@ -995,7 +995,7 @@ context "when stream is prefixed with matching tokens" $ it "consumes the tokens" $ property $ \s' -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhile1P Nothing isLetter s = 'a' : s' (z, zs) = DL.span isLetter s@@ -1004,7 +1004,7 @@ context "when stream is not prefixed with at least one matching token" $ it "signals correct parse error" $ property $ \s' -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhile1P (Just "foo") isLetter s = '3' : s' pe = err 0 (utok '3' <> elabel "foo")@@ -1013,20 +1013,20 @@ context "when stream is empty" $ do context "with label" $ it "signals correct parse error" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhile1P (Just "foo") isLetter pe = err 0 (ueof <> elabel "foo") grs p "" (`shouldFailWith` pe) grs' p "" (`failsLeaving` "") context "without label" $ it "signals correct parse error" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhile1P Nothing isLetter pe = err 0 ueof grs p "" (`shouldFailWith` pe) grs' p "" (`failsLeaving` "") context "with two takeWhile1P in a row (testing hints)" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = do void $ takeWhile1P (Just "foo") (== 'a') void $ takeWhile1P (Just "bar") (== 'b')@@ -1045,7 +1045,7 @@ grs' p s (`failsLeaving` "") context "without label (testing hints)" $ it "there are no hints" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeWhile1P Nothing (== 'a') <* empty s = "aaa" grs p s (`shouldFailWith` err 3 mempty)@@ -1055,14 +1055,14 @@ context "when taking 0 tokens" $ do context "when stream is empty" $ it "succeeds returning zero-length chunk" $ do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP Nothing 0 grs p "" (`shouldParse` "") context "when stream is not empty" $ it "succeeds returning zero-length chunk" $ property $ \s -> not (null s) ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP Nothing 0 grs p s (`shouldParse` "") grs' p s (`succeedsLeaving` s)@@ -1070,14 +1070,14 @@ context "when stream is empty" $ it "succeeds returning zero-length chunk" $ property $ \(Negative n) -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP Nothing n grs p "" (`shouldParse` "") context "when stream is not empty" $ it "succeeds returning zero-length chunk" $ property $ \(Negative n) s -> not (null s) ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP Nothing n grs p s (`shouldParse` "") grs' p s (`succeedsLeaving` s)@@ -1086,7 +1086,7 @@ context "with label" $ it "signals correct parse error" $ property $ \(Positive n) -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP (Just "foo") n pe = err 0 (ueof <> elabel "foo") grs p "" (`shouldFailWith` pe)@@ -1094,14 +1094,14 @@ context "without label" $ it "signals correct parse error" $ property $ \(Positive n) -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP Nothing n pe = err 0 ueof grs p "" (`shouldFailWith` pe) context "when stream has not enough tokens" $ it "signals correct parse error" $ property $ \(Positive n) s -> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP (Just "foo") n m = length s pe = err m (ueof <> elabel "foo")@@ -1112,7 +1112,7 @@ it "succeeds returning the extracted tokens" $ property $ \(Positive n) s -> length s >= n ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP (Just "foo") n (s0, s1) = splitAt n s grs p s (`shouldParse` s0)@@ -1121,7 +1121,7 @@ it "there are no hints to influence the parse error" $ property $ \(Positive n) s -> length s >= n ==> do- let p :: MonadParsec Void String m => m String+ let p :: (MonadParsec Void String m) => m String p = takeP (Just "foo") n <* empty pe = err n mempty grs p s (`shouldFailWith` pe)@@ -1131,28 +1131,28 @@ describe "failure" $ it "signals correct parse error" $ property $ \us ps -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = void (failure us ps) grs p "" (`shouldFailWith` TrivialError 0 us ps) describe "fancyFailure" $ it "singals correct parse error" $ property $ \xs -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = void (fancyFailure xs) grs p "" (`shouldFailWith` FancyError 0 xs) describe "unexpected" $ it "signals correct parse error" $ property $ \item -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = void (unexpected item) grs p "" (`shouldFailWith` TrivialError 0 (pure item) E.empty) describe "customFailure" $ it "signals correct parse error" $ property $ \n st -> do- let p :: MonadParsec Int String m => m ()+ let p :: (MonadParsec Int String m) => m () p = void (customFailure n) xs = E.singleton (ErrorCustom n) runParser p "" (stateInput st) `shouldFailWith` FancyError 0 xs@@ -1209,7 +1209,7 @@ describe "registerParseError" $ do it "immediately fails with given parse error" $ property $ \st es -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = forM_ (NE.reverse es) registerParseError st' = st@@ -1223,14 +1223,14 @@ describe "registerFailure" $ it "signals correct parse error" $ property $ \us ps -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = void (registerFailure us ps) grs p "" (`shouldFailWith` TrivialError 0 us ps) describe "reisterFancyFailure" $ it "singals correct parse error" $ property $ \xs -> do- let p :: MonadParsec Void String m => m ()+ let p :: (MonadParsec Void String m) => m () p = void (registerFancyFailure xs) grs p "" (`shouldFailWith` FancyError 0 xs) @@ -1239,7 +1239,7 @@ -- "Text.Megaparsec.Byte". describe "anySingle" $ do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = anySingle context "when stream is not empty" $ it "succeeds consuming next character in the stream" $@@ -1255,7 +1255,7 @@ context "when stream begins with the character specified as argument" $ it "signals correct parse error" $ property $ \ch s' -> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = anySingleBut ch s = ch : s' grs p s (`shouldFailWith` err 0 (utok ch))@@ -1264,7 +1264,7 @@ it "parses first character in the stream" $ property $ \ch s -> not (null s) && ch /= head s ==> do- let p :: MonadParsec Void String m => m Char+ let p :: (MonadParsec Void String m) => m Char p = anySingleBut ch grs p s (`shouldParse` head s) grs' p s (`succeedsLeaving` tail s)@@ -1388,7 +1388,7 @@ describe "setParserState and getParserState" $ it "sets parser state and gets it back" $ property $ \s1 s2 -> do- let p :: MonadParsec Void String m => m (State String Void)+ let p :: (MonadParsec Void String m) => m (State String Void) p = do st <- getParserState guard (st == initialState s)