Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
MarkupParse.FlatParse
Description
Various flatparse helpers and combinators.
Synopsis
- data ParserWarning
- runParserMaybe :: Parser e a -> ByteString -> Maybe a
- runParserEither :: Parser String a -> ByteString -> Either String a
- runParserWarn :: Parser String a -> ByteString -> These ParserWarning a
- runParser_ :: Parser String a -> ByteString -> a
- isWhitespace :: Char -> Bool
- ws_ :: Parser e ()
- ws :: Parser e Char
- wss :: Parser e ByteString
- nota :: Char -> Parser e ByteString
- isa :: (Char -> Bool) -> Parser e ByteString
- sq :: ParserT st e ()
- dq :: ParserT st e ()
- wrappedDq :: Parser b ByteString
- wrappedSq :: Parser b ByteString
- wrappedQ :: Parser e ByteString
- wrappedQNoGuard :: Parser e a -> Parser e a
- eq :: Parser e ()
- sep :: Parser e s -> Parser e a -> Parser e [a]
- bracketed :: Parser e b -> Parser e b -> Parser e a -> Parser e a
- bracketedSB :: Parser e [Char]
- wrapped :: Parser e () -> Parser e a -> Parser e a
- int :: Parser e Int
- double :: Parser e Double
- signed :: Num b => Parser e b -> Parser e b
- byteStringOf' :: Parser e a -> Parser e ByteString
parsing
data ParserWarning Source #
Warnings covering leftovers, Err
s and Fail
>>>
runParserWarn ws " x"
These (ParserLeftover "x") ' '
>>>
runParserWarn ws "x"
This ParserUncaught
>>>
runParserWarn (ws `cut` "no whitespace") "x"
This (ParserError "no whitespace")
Constructors
ParserLeftover ByteString | |
ParserError String | |
ParserUncaught |
Instances
runParserMaybe :: Parser e a -> ByteString -> Maybe a Source #
runParserEither :: Parser String a -> ByteString -> Either String a Source #
runParserWarn :: Parser String a -> ByteString -> These ParserWarning a Source #
Run parser, returning leftovers and errors as ParserWarning
s.
>>>
runParserWarn ws " "
That ' '
>>>
runParserWarn ws "x"
This ParserUncaught
>>>
runParserWarn ws " x"
These (ParserLeftover "x") ' '
runParser_ :: Parser String a -> ByteString -> a Source #
Run parser, discards leftovers & throws an error on failure.
>>>
runParser_ ws " "
' '
>>>
runParser_ ws "x"
*** Exception: uncaught parse error ...
parsers
isWhitespace :: Char -> Bool Source #
\n \t \f \r and space
Consume whitespace.
>>>
runParser ws_ " \nx"
OK () "x"
>>>
runParser ws_ "x"
OK () "x"
wss :: Parser e ByteString Source #
multiple whitespace
>>>
runParser wss " \nx"
OK " \n" "x"
>>>
runParser wss "x"
Fail
nota :: Char -> Parser e ByteString Source #
Parse whilst not a specific character
>>>
runParser (nota 'x') "abcxyz"
OK "abc" "xyz"
isa :: (Char -> Bool) -> Parser e ByteString Source #
Parse whilst satisfying a predicate.
>>>
runParser (isa (=='x')) "xxxabc"
OK "xxx" "abc"
wrappedDq :: Parser b ByteString Source #
A double-quoted string.
wrappedSq :: Parser b ByteString Source #
A single-quoted string.
wrappedQ :: Parser e ByteString Source #
A single-quoted or double-quoted string.
>>>
runParserMaybe wrappedQ "\"quoted\""
Just "quoted"
>>>
runParserMaybe wrappedQ "'quoted'"
Just "quoted"
wrappedQNoGuard :: Parser e a -> Parser e a Source #
A single-quoted or double-quoted wrapped parser.
>>>
runParser (wrappedQNoGuard (many $ satisfy (/= '"'))) "\"name\""
OK "name" ""
Will consume quotes if the underlying parser does.
>>>
runParser (wrappedQNoGuard (many anyChar)) "\"name\""
Fail
xml production [25]
>>>
runParserMaybe eq " = "
Just ()
>>>
runParserMaybe eq "="
Just ()
sep :: Parser e s -> Parser e a -> Parser e [a] Source #
some with a separator
>>>
runParser (sep ws (many (satisfy (/= ' ')))) "a b c"
OK ["a","b","c"] ""
bracketed :: Parser e b -> Parser e b -> Parser e a -> Parser e a Source #
parser bracketed by two other parsers
>>>
runParser (bracketed ($(char '[')) ($(char ']')) (many (satisfy (/= ']')))) "[bracketed]"
OK "bracketed" ""
bracketedSB :: Parser e [Char] Source #
Bracketed by square brackets.
>>>
runParser bracketedSB "[bracketed]"
OK "bracketed" ""
wrapped :: Parser e () -> Parser e a -> Parser e a Source #
parser wrapped by another parser
>>>
runParser (wrapped ($(char '"')) (many (satisfy (/= '"')))) "\"wrapped\""
OK "wrapped" ""
double :: Parser e Double Source #
>>>
runParser double "1.234x"
OK 1.234 "x"
>>>
runParser double "."
Fail
>>>
runParser double "123"
OK 123.0 ""
>>>
runParser double ".123"
OK 0.123 ""
>>>
runParser double "123."
OK 123.0 ""
signed :: Num b => Parser e b -> Parser e b Source #
>>>
runParser (signed double) "-1.234x"
OK (-1.234) "x"
byteStringOf' :: Parser e a -> Parser e ByteString Source #
byteStringOf
but using withSpan internally. Doesn't seems faster...