Safe Haskell | Safe |
---|---|
Language | Haskell98 |
Descriptive parsers.
Synopsis
- consume :: Consumer s d Identity a -> s -> Result (Description d) a
- describe :: Consumer s d Identity a -> s -> Description d
- runConsumer :: Monad m => Consumer s d m a -> StateT s m (Result (Description d) a)
- runDescription :: Monad m => Consumer s d m a -> StateT s m (Description d)
- data Description a
- = Unit !a
- | Bounded !Integer !Bound !(Description a)
- | And !(Description a) !(Description a)
- | Or !(Description a) !(Description a)
- | Sequence ![Description a]
- | Wrap a !(Description a)
- | None
- data Bound
- data Consumer s d m a = Consumer {
- consumerDesc :: StateT s m (Description d)
- consumerParse :: StateT s m (Result (Description d) a)
- data Result e a
- consumer :: StateT s m (Description d) -> StateT s m (Result (Description d) a) -> Consumer s d m a
- wrap :: (StateT t m (Description d) -> StateT s m (Description d)) -> (StateT t m (Description d) -> StateT t m (Result (Description d) a) -> StateT s m (Result (Description d) b)) -> Consumer t d m a -> Consumer s d m b
Consuming and describing
:: Consumer s d Identity a | The consumer to run. |
-> s | Initial state. |
-> Result (Description d) a |
Run a consumer.
:: Consumer s d Identity a | The consumer to run. |
-> s | Initial state. Can be "empty" if you don't use it for generating descriptions. |
-> Description d | A description and resultant state. |
Describe a consumer.
Lower-level runners
:: Monad m | |
=> Consumer s d m a | The consumer to run. |
-> StateT s m (Result (Description d) a) |
Run a consumer.
:: Monad m | |
=> Consumer s d m a | The consumer to run. |
-> StateT s m (Description d) | A description and resultant state. |
Describe a consumer.
Types
data Description a Source #
Description of a consumable thing.
Unit !a | |
Bounded !Integer !Bound !(Description a) | |
And !(Description a) !(Description a) | |
Or !(Description a) !(Description a) | |
Sequence ![Description a] | |
Wrap a !(Description a) | |
None |
Instances
The bounds of a many-consumable thing.
data Consumer s d m a Source #
A consumer.
Consumer | |
|
Instances
Monad m => Functor (Consumer s d m) Source # | |
Monad m => Applicative (Consumer s d m) Source # | |
Defined in Descriptive pure :: a -> Consumer s d m a # (<*>) :: Consumer s d m (a -> b) -> Consumer s d m a -> Consumer s d m b # liftA2 :: (a -> b -> c) -> Consumer s d m a -> Consumer s d m b -> Consumer s d m c # (*>) :: Consumer s d m a -> Consumer s d m b -> Consumer s d m b # (<*) :: Consumer s d m a -> Consumer s d m b -> Consumer s d m a # | |
Monad m => Alternative (Consumer s d m) Source # | |
(Semigroup a, Monad m) => Semigroup (Consumer s d m a) Source # | |
(Semigroup a, Monoid a, Monad m) => Monoid (Consumer s d m a) Source # | |
Some result.
Failed e | The whole process failed. |
Succeeded a | The whole process succeeded. |
Continued e | There were errors but we continued to collect all the errors. |
Instances
Bifunctor Result Source # | |
(Eq e, Eq a) => Eq (Result e a) Source # | |
(Ord e, Ord a) => Ord (Result e a) Source # | |
(Show e, Show a) => Show (Result e a) Source # | |
Semigroup a => Semigroup (Result (Description d) a) Source # | |
Defined in Descriptive (<>) :: Result (Description d) a -> Result (Description d) a -> Result (Description d) a # sconcat :: NonEmpty (Result (Description d) a) -> Result (Description d) a # stimes :: Integral b => b -> Result (Description d) a -> Result (Description d) a # | |
(Semigroup a, Monoid a) => Monoid (Result (Description d) a) Source # | |
Defined in Descriptive mempty :: Result (Description d) a # mappend :: Result (Description d) a -> Result (Description d) a -> Result (Description d) a # mconcat :: [Result (Description d) a] -> Result (Description d) a # |
Combinators
:: StateT s m (Description d) | Produce description based on the state. |
-> StateT s m (Result (Description d) a) | Parse the state and maybe transform it if desired. |
-> Consumer s d m a |
Make a self-describing consumer.
:: (StateT t m (Description d) -> StateT s m (Description d)) | Transform the description. |
-> (StateT t m (Description d) -> StateT t m (Result (Description d) a) -> StateT s m (Result (Description d) b)) | Transform the parser. Can re-run the parser as many times as desired. |
-> Consumer t d m a | |
-> Consumer s d m b |
Wrap a consumer with another consumer. The type looks more intimidating than it actually is. The source code is trivial. It simply allows for a way to transform the type of the state.