Safe Haskell | None |
---|---|
Language | Haskell2010 |
FlatParse.Basic.Base
Description
Basic parser building blocks.
Synopsis
- eof :: forall (st :: ZeroBitType) e. ParserT st e ()
- take :: forall (st :: ZeroBitType) e. Int -> ParserT st e ByteString
- take# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ByteString
- takeUnsafe# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ByteString
- takeRest :: forall (st :: ZeroBitType) e. ParserT st e ByteString
- skip :: forall (st :: ZeroBitType) e. Int -> ParserT st e ()
- skip# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ()
- skipBack :: forall (st :: ZeroBitType) e. Int -> ParserT st e ()
- skipBack# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ()
- atSkip# :: forall (st :: ZeroBitType) e a. Int# -> ParserT st e a -> ParserT st e a
- atSkipUnsafe# :: forall (st :: ZeroBitType) e r. Int# -> ParserT st e r -> ParserT st e r
- branch :: forall (st :: ZeroBitType) e a b. ParserT st e a -> ParserT st e b -> ParserT st e b -> ParserT st e b
- notFollowedBy :: forall (st :: ZeroBitType) e a b. ParserT st e a -> ParserT st e b -> ParserT st e a
- chainl :: forall b a (st :: ZeroBitType) e. (b -> a -> b) -> ParserT st e b -> ParserT st e a -> ParserT st e b
- chainr :: forall a b (st :: ZeroBitType) e. (a -> b -> b) -> ParserT st e a -> ParserT st e b -> ParserT st e b
- lookahead :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e a
- ensure :: forall (st :: ZeroBitType) e. Int -> ParserT st e ()
- ensure# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ()
- withEnsure :: forall (st :: ZeroBitType) e r. Int -> ParserT st e r -> ParserT st e r
- withEnsure1 :: forall (st :: ZeroBitType) e r. ParserT st e r -> ParserT st e r
- withEnsure# :: forall (st :: ZeroBitType) e r. Int# -> ParserT st e r -> ParserT st e r
- isolate :: forall (st :: ZeroBitType) e a. Int -> ParserT st e a -> ParserT st e a
- isolate# :: forall (st :: ZeroBitType) e a. Int# -> ParserT st e a -> ParserT st e a
- isolateUnsafe# :: forall (st :: ZeroBitType) e a. Int# -> ParserT st e a -> ParserT st e a
- skipMany :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e ()
- skipSome :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e ()
- failed :: forall (st :: ZeroBitType) e a. ParserT st e a
- try :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e a
- err :: forall e (st :: ZeroBitType) a. e -> ParserT st e a
- withError :: forall (st :: ZeroBitType) e b. ParserT st e b -> (e -> ParserT st e b) -> ParserT st e b
- withAnyResult :: forall (st :: ZeroBitType) t a e b. ParserT st t a -> (a -> ParserT st e b) -> ParserT st e b -> (t -> ParserT st e b) -> ParserT st e b
- fails :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e ()
- cut :: forall (st :: ZeroBitType) e a. ParserT st e a -> e -> ParserT st e a
- cutting :: forall (st :: ZeroBitType) e a. ParserT st e a -> e -> (e -> e -> e) -> ParserT st e a
- optional :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e (Maybe a)
- optional_ :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e ()
- withOption :: forall (st :: ZeroBitType) e a r. ParserT st e a -> (a -> ParserT st e r) -> ParserT st e r -> ParserT st e r
Bytewise
eof :: forall (st :: ZeroBitType) e. ParserT st e () Source #
Succeed if the input is empty.
take :: forall (st :: ZeroBitType) e. Int -> ParserT st e ByteString Source #
Read the given number of bytes as a ByteString
.
Throws a runtime error if given a negative integer.
This does no copying. The ByteString
returned is a "slice" of the input,
and will keep it alive. To avoid this, use copy
on the output.
take# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ByteString Source #
Read n#
bytes as a ByteString
. Fails if fewer than n#
bytes are
available.
Throws a runtime error if given a negative integer.
This does no copying. The ByteString
returned is a "slice" of the input,
and will keep it alive. To avoid this, use copy
on the output.
takeUnsafe# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e ByteString Source #
Read n#
bytes as a ByteString
. Fails if fewer than n#
bytes are
available.
Undefined behaviour if given a negative integer.
This does no copying. The ByteString
returned is a "slice" of the input,
and will keep it alive. To avoid this, use copy
on the output.
takeRest :: forall (st :: ZeroBitType) e. ParserT st e ByteString Source #
Consume the rest of the input. May return the empty bytestring.
This does no copying. The ByteString
returned is a "slice" of the input,
and will keep it alive. To avoid this, use copy
on the output.
skip :: forall (st :: ZeroBitType) e. Int -> ParserT st e () Source #
Skip forward n
bytes. Fails if fewer than n
bytes are available.
Throws a runtime error if given a negative integer.
skip# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e () Source #
Skip forward n#
bytes. Fails if fewer than n#
bytes are available.
Throws a runtime error if given a negative integer.
skipBack :: forall (st :: ZeroBitType) e. Int -> ParserT st e () Source #
Go back i
bytes in the input. Takes a positive integer.
Extremely unsafe. Makes no checks. Almost certainly a Bad Idea.
skipBack# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e () Source #
Go back n#
bytes. Takes a positive integer.
Extremely unsafe. Makes no checks. Almost certainly a Bad Idea.
atSkip# :: forall (st :: ZeroBitType) e a. Int# -> ParserT st e a -> ParserT st e a Source #
Skip forward n#
bytes and run the given parser. Fails if fewer than n#
bytes are available.
Throws a runtime error if given a negative integer.
atSkipUnsafe# :: forall (st :: ZeroBitType) e r. Int# -> ParserT st e r -> ParserT st e r Source #
Skip forward n
bytes and run the given parser. Fails if fewer than n
bytes are available.
Undefined behaviour if given a negative integer.
Combinators
branch :: forall (st :: ZeroBitType) e a b. ParserT st e a -> ParserT st e b -> ParserT st e b -> ParserT st e b Source #
notFollowedBy :: forall (st :: ZeroBitType) e a b. ParserT st e a -> ParserT st e b -> ParserT st e a Source #
Succeed if the first parser succeeds and the second one fails.
chainl :: forall b a (st :: ZeroBitType) e. (b -> a -> b) -> ParserT st e b -> ParserT st e a -> ParserT st e b Source #
chainr :: forall a b (st :: ZeroBitType) e. (a -> b -> b) -> ParserT st e a -> ParserT st e b -> ParserT st e b Source #
lookahead :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e a Source #
Save the parsing state, then run a parser, then restore the state.
ensure :: forall (st :: ZeroBitType) e. Int -> ParserT st e () Source #
Assert that there are at least n
bytes remaining.
Undefined behaviour if given a negative integer.
ensure# :: forall (st :: ZeroBitType) e. Int# -> ParserT st e () Source #
Assert that there are at least n#
bytes remaining.
Undefined behaviour if given a negative integer.
withEnsure :: forall (st :: ZeroBitType) e r. Int -> ParserT st e r -> ParserT st e r Source #
Assert that there are at least n#
bytes remaining (CPS).
Undefined behaviour if given a negative integer.
withEnsure1 :: forall (st :: ZeroBitType) e r. ParserT st e r -> ParserT st e r Source #
Assert that there is at least 1 byte remaining (CPS).
Undefined behaviour if given a negative integer.
withEnsure# :: forall (st :: ZeroBitType) e r. Int# -> ParserT st e r -> ParserT st e r Source #
Assert that there are at least n#
bytes remaining (CPS).
Undefined behaviour if given a negative integer.
isolate :: forall (st :: ZeroBitType) e a. Int -> ParserT st e a -> ParserT st e a Source #
isolate n p
runs the parser p
isolated to the next n
bytes.
All isolated bytes must be consumed.
Throws a runtime error if given a negative integer.
isolate# :: forall (st :: ZeroBitType) e a. Int# -> ParserT st e a -> ParserT st e a Source #
isolate# n# p
runs the parser p
isolated to the next n#
bytes.
All isolated bytes must be consumed.
Throws a runtime error if given a negative integer.
isolateUnsafe# :: forall (st :: ZeroBitType) e a. Int# -> ParserT st e a -> ParserT st e a Source #
isolateUnsafe# n# p
runs the parser p
isolated to the next n#
bytes.
All isolated bytes must be consumed.
Undefined behaviour if given a negative integer.
Non-specific (TODO)
skipMany :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e () Source #
Skip a parser zero or more times.
skipSome :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e () Source #
Skip a parser one or more times.
Errors and failures
failed :: forall (st :: ZeroBitType) e a. ParserT st e a Source #
The failing parser. By default, parser choice (<|>)
arbitrarily backtracks
on parser failure.
try :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e a Source #
Convert a parsing error into failure.
err :: forall e (st :: ZeroBitType) a. e -> ParserT st e a Source #
withError :: forall (st :: ZeroBitType) e b. ParserT st e b -> (e -> ParserT st e b) -> ParserT st e b Source #
Run the parser, if an error is thrown, handle it with the given function.
Arguments
:: forall (st :: ZeroBitType) t a e b. ParserT st t a | The parser to run. |
-> (a -> ParserT st e b) | The parser to run in case of success. |
-> ParserT st e b | The parser to run in case of failure. |
-> (t -> ParserT st e b) | The parser to run in case of error. |
-> ParserT st e b |
Run the parser, and handle each possible result.
fails :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e () Source #
Convert a parsing failure to a success.
cut :: forall (st :: ZeroBitType) e a. ParserT st e a -> e -> ParserT st e a Source #
Convert a parsing failure to an error.
cutting :: forall (st :: ZeroBitType) e a. ParserT st e a -> e -> (e -> e -> e) -> ParserT st e a Source #
Run the parser, if we get a failure, throw the given error, but if we get an error, merge the
inner and the newly given errors using the e -> e -> e
function. This can be useful for
implementing parsing errors which may propagate hints or accummulate contextual information.
optional :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e (Maybe a) Source #
Convert a parsing failure to a Maybe
. If possible, use withOption
instead.
optional_ :: forall (st :: ZeroBitType) e a. ParserT st e a -> ParserT st e () Source #
Convert a parsing failure to a ()
.
withOption :: forall (st :: ZeroBitType) e a r. ParserT st e a -> (a -> ParserT st e r) -> ParserT st e r -> ParserT st e r Source #