Copyright | (c) Eric Mertens 2023 |
---|---|
License | ISC |
Maintainer | emertens@gmail.com |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This module provides utilities for matching key-value pairs out of tables while building up application-specific values.
It will help generate warnings for unused keys, help select between multiple possible keys, and emit location-specific error messages when keys are unavailable.
This module provides the ParseTable
implementation, but
most of the basic functionality is exported directly from
Toml.FromValue.
Synopsis
- data ParseTable a
- data KeyAlt a
- pickKey :: [KeyAlt a] -> ParseTable a
- runParseTable :: ParseTable a -> Table -> Matcher a
- liftMatcher :: Matcher a -> ParseTable a
- warnTable :: String -> ParseTable ()
- setTable :: Table -> ParseTable ()
- getTable :: ParseTable Table
Base interface
data ParseTable a Source #
A Matcher
that tracks a current set of unmatched key-value
pairs from a table.
Use optKey
and reqKey
to extract keys.
Use getTable
and setTable
to override the table and implement
other primitives.
Instances
Key and value matching function
Since: 1.2.0.0
pickKey :: [KeyAlt a] -> ParseTable a Source #
Take the first option from a list of table keys and matcher functions. This operation will commit to the first table key that matches. If the associated matcher fails, only that error will be propagated and the other alternatives will not be matched.
If no keys match, an error message is generated explaining which keys would have been accepted.
This is provided as an alternative to chaining multiple
reqKey
cases together with (
because that will
generate one error message for each unmatched alternative as well as
the error associate with the matched alternative.<|>
)
Since: 1.2.0.0
runParseTable :: ParseTable a -> Table -> Matcher a Source #
Run a ParseTable
computation with a given starting Table
.
Unused tables will generate a warning. To change this behavior
getTable
and setTable
can be used to discard or generate
error messages.
Primitives
liftMatcher :: Matcher a -> ParseTable a Source #
Lift a matcher into the current table parsing context.
warnTable :: String -> ParseTable () Source #
Emit a warning at the current location.
setTable :: Table -> ParseTable () Source #
Replace the remaining portion of the table being matched.
getTable :: ParseTable Table Source #
Return the remaining portion of the table being matched.