module Parsing.Utils where
import Text.Parsec
suppressErr :: Parsec s u a -> Parsec s u a
suppressErr p = p <?> ""
failWithIf :: String -> Bool -> Parsec s u ()
failWithIf msg cond = if cond then fail msg else return ()
failIf :: Bool -> Parsec s u ()
failIf = failWithIf ""
withModifiedState :: Parsec s u a -> (u -> u) -> Parsec s u a
withModifiedState p modifier = do
state <- getState
putState $ modifier state
result <- p
putState state
return result
betweenWithErrors :: String -> String -> String -> Parsec String u a -> Parsec String u a
betweenWithErrors open close name = between
(try (string open) <?> "\"" ++ open ++ "\" (" ++ name ++ ")")
(try (string close) <?> "closing \"" ++ close ++ "\" (" ++ name ++ ")")