| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
ParseLib.Simple.Core
Description
If you are only interested in full parses of some parser p, enforce
full parses on the Parser level using the
eof combinator as in . This ensures error reporting.parseImproved (p <*
eof) input
Report bugs to gitlab
or p.rednaz@googlemail.com, please.
Synopsis
- parseImproved :: (ErrorsPretty s, Ord s) => Parser s a -> [s] -> [(a, [s])]
- parseAndTraceImproved :: (ErrorsPretty s, Ord s) => Config -> Parser s a -> [s] -> [(a, [s])]
- parseWithConfig :: Ord s => Config -> Parser s a -> [s] -> Either (ParseErrorBundle [s]) (NonEmpty (a, [s]))
- parseAndTrace :: (Show s, Ord s) => Config -> Parser s a -> [s] -> [(a, [s])]
- parse :: (Show s, Ord s) => Parser s a -> [s] -> [(a, [s])]
- type Parser s r = [s] -> ([(r, [s])], DifferenceList (ParseError [s]))
- anySymbol :: Parser s s
- satisfy :: (s -> Bool) -> Parser s s
- empty :: Parser s a
- failp :: Parser s a
- succeed :: a -> Parser s a
- pure :: a -> Parser s a
- fail :: String -> Parser s a
- expected :: [s] -> Parser s a
- (<|>) :: Parser s a -> Parser s a -> Parser s a
- (<<|>) :: Parser s a -> Parser s a -> Parser s a
- (<*>) :: Parser s (b -> a) -> Parser s b -> Parser s a
- (<$>) :: (a -> b) -> Parser s a -> Parser s b
- (>>=) :: Parser s a -> (a -> Parser s b) -> Parser s b
- look :: Parser s [s]
Running parsers
parseImproved :: (ErrorsPretty s, Ord s) => Parser s a -> [s] -> [(a, [s])] Source #
Runs a parser on a given string printing error messages to standard
error (stderr) like parse but makes error messages bearable for
Parser Char. parseImproved is always preferable to parse.
Notice that, when using parseImproved, you might need to add Ord and
ErrorsPretty constraints to your own functions and ensure your own
data types are deriving (.Ord, Show)
The ErrorsPretty constraint is automatically fulfilled by Show
instances. But if you see the following GHC error, you usually need to
add a ( constraint to your function and ErrorsPretty s)import
ParseLib.Error (.ErrorsPretty)
Overlapping instances for ErrorsPretty s arising from a use of ‘parseImproved’
ErrorsPretty is not defined in this package but in
uu-tc-error-error. We
did this so you can switch back and forth between this library and
uu-tc without the need to
remove ErrorsPretty constraints from your code. Just permanently keep
uu-tc-error-error
in your .cabal file. It does not conflict with
uu-tc because there are
no module name collisions.
parseAndTraceImproved :: (ErrorsPretty s, Ord s) => Config -> Parser s a -> [s] -> [(a, [s])] Source #
Runs a parser on a given string printing error messages to standard
error (stderr) like parseAndTrace but makes error messages bearable
for Parser Char. parseAndTraceImproved is always preferable to
parse.
The ErrorsPretty constraint is automatically fulfilled by Show
instances. But if you see the following GHC error, you usually need to
add a ( constraint to your function and ErrorsPretty s)import
ParseLib.Error (.ErrorsPretty)
Overlapping instances for ErrorsPretty s arising from a use of ‘parseImproved’
ErrorsPretty is not defined in this package but in
uu-tc-error-error. We
did this so you can switch back and forth between this library and
uu-tc without the need to
remove ErrorsPretty constraints from your code. Just permanently keep
uu-tc-error-error
in your .cabal file. It does not conflict with
uu-tc because there are
no module name collisions.
parseWithConfig :: Ord s => Config -> Parser s a -> [s] -> Either (ParseErrorBundle [s]) (NonEmpty (a, [s])) Source #
Runs a parser on a given string. Pretty print the error information
with errorBundlePrettyImproved.
parseAndTrace :: (Show s, Ord s) => Config -> Parser s a -> [s] -> [(a, [s])] Source #
Runs a parser on a given string printing error messages to standard
error (stderr) like parseAndTraceImproved but with much worse error
messages for Parser Char. parseAndTraceImproved is always preferable
to parseAndTrace.
parse :: (Show s, Ord s) => Parser s a -> [s] -> [(a, [s])] Source #
Runs a parser on a given string printing error messages to standard
error (stderr) like parseImproved but with much worse error messages
for Parser Char. parseImproved is always preferable to parse.
Notice that, when using parse, you might need to add Ord and Show
constraints to your own functions and ensure your own data types are
deriving (.Ord, Show)
The type of parsers
type Parser s r = [s] -> ([(r, [s])], DifferenceList (ParseError [s])) Source #
An input string is mapped to a list of successful parses.
For each succesful parse, we return the result of type r,
and the remaining input string. The input must be a list of
symbols.
Elementary parsers
satisfy :: (s -> Bool) -> Parser s s Source #
Takes a predicate and returns a parser that parses a single symbol satisfying that predicate.
pure :: a -> Parser s a Source #
Same as succeed; provided for compatiblity with the applicative
interface.
Parser combinators
(<|>) :: Parser s a -> Parser s a -> Parser s a infixr 3 Source #
Choice between two parsers with the same result type.
(<<|>) :: Parser s a -> Parser s a -> Parser s a infixr 3 Source #
Biased choice. If the left hand side parser succeeds, the right hand side is not considered. Use with care!
(>>=) :: Parser s a -> (a -> Parser s b) -> Parser s b infixl 1 Source #
Monadic bind. Do not use this combinator unless absolutely
required. Most sequencing can be done with <*>.