descriptive-0.9.5: Self-describing consumers/parsers; forms, cmd-line args, JSON, etc.

Safe HaskellSafe
LanguageHaskell98

Descriptive

Contents

Description

Descriptive parsers.

Synopsis

Consuming and describing

consume Source #

Arguments

:: Consumer s d Identity a

The consumer to run.

-> s

Initial state.

-> Result (Description d) a 

Run a consumer.

describe Source #

Arguments

:: 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

runConsumer Source #

Arguments

:: Monad m 
=> Consumer s d m a

The consumer to run.

-> StateT s m (Result (Description d) a) 

Run a consumer.

runDescription Source #

Arguments

:: 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.

Instances
Functor Description Source # 
Instance details

Defined in Descriptive

Methods

fmap :: (a -> b) -> Description a -> Description b #

(<$) :: a -> Description b -> Description a #

Eq a => Eq (Description a) Source # 
Instance details

Defined in Descriptive

Show a => Show (Description a) Source # 
Instance details

Defined in Descriptive

Semigroup (Description d) Source # 
Instance details

Defined in Descriptive

Monoid (Description d) Source # 
Instance details

Defined in Descriptive

Semigroup a => Semigroup (Result (Description d) a) Source # 
Instance details

Defined in Descriptive

(Semigroup a, Monoid a) => Monoid (Result (Description d) a) Source # 
Instance details

Defined in Descriptive

data Bound Source #

The bounds of a many-consumable thing.

Instances
Eq Bound Source # 
Instance details

Defined in Descriptive

Methods

(==) :: Bound -> Bound -> Bool #

(/=) :: Bound -> Bound -> Bool #

Show Bound Source # 
Instance details

Defined in Descriptive

Methods

showsPrec :: Int -> Bound -> ShowS #

show :: Bound -> String #

showList :: [Bound] -> ShowS #

data Consumer s d m a Source #

A consumer.

Constructors

Consumer 
Instances
Monad m => Functor (Consumer s d m) Source # 
Instance details

Defined in Descriptive

Methods

fmap :: (a -> b) -> Consumer s d m a -> Consumer s d m b #

(<$) :: a -> Consumer s d m b -> Consumer s d m a #

Monad m => Applicative (Consumer s d m) Source # 
Instance details

Defined in Descriptive

Methods

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 # 
Instance details

Defined in Descriptive

Methods

empty :: Consumer s d m a #

(<|>) :: Consumer s d m a -> Consumer s d m a -> Consumer s d m a #

some :: Consumer s d m a -> Consumer s d m [a] #

many :: Consumer s d m a -> Consumer s d m [a] #

(Semigroup a, Monad m) => Semigroup (Consumer s d m a) Source # 
Instance details

Defined in Descriptive

Methods

(<>) :: Consumer s d m a -> Consumer s d m a -> Consumer s d m a #

sconcat :: NonEmpty (Consumer s d m a) -> Consumer s d m a #

stimes :: Integral b => b -> Consumer s d m a -> Consumer s d m a #

(Semigroup a, Monoid a, Monad m) => Monoid (Consumer s d m a) Source # 
Instance details

Defined in Descriptive

Methods

mempty :: Consumer s d m a #

mappend :: Consumer s d m a -> Consumer s d m a -> Consumer s d m a #

mconcat :: [Consumer s d m a] -> Consumer s d m a #

data Result e a Source #

Some result.

Constructors

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 # 
Instance details

Defined in Descriptive

Methods

bimap :: (a -> b) -> (c -> d) -> Result a c -> Result b d #

first :: (a -> b) -> Result a c -> Result b c #

second :: (b -> c) -> Result a b -> Result a c #

(Eq e, Eq a) => Eq (Result e a) Source # 
Instance details

Defined in Descriptive

Methods

(==) :: Result e a -> Result e a -> Bool #

(/=) :: Result e a -> Result e a -> Bool #

(Ord e, Ord a) => Ord (Result e a) Source # 
Instance details

Defined in Descriptive

Methods

compare :: Result e a -> Result e a -> Ordering #

(<) :: Result e a -> Result e a -> Bool #

(<=) :: Result e a -> Result e a -> Bool #

(>) :: Result e a -> Result e a -> Bool #

(>=) :: Result e a -> Result e a -> Bool #

max :: Result e a -> Result e a -> Result e a #

min :: Result e a -> Result e a -> Result e a #

(Show e, Show a) => Show (Result e a) Source # 
Instance details

Defined in Descriptive

Methods

showsPrec :: Int -> Result e a -> ShowS #

show :: Result e a -> String #

showList :: [Result e a] -> ShowS #

Semigroup a => Semigroup (Result (Description d) a) Source # 
Instance details

Defined in Descriptive

(Semigroup a, Monoid a) => Monoid (Result (Description d) a) Source # 
Instance details

Defined in Descriptive

Combinators

consumer Source #

Arguments

:: 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.

wrap Source #

Arguments

:: (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.