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

Safe HaskellSafe-Inferred
LanguageHaskell98

Descriptive

Contents

Description

Descriptive parsers.

Synopsis

Consuming and describing

consume Source

Arguments

:: Consumer s d a

The consumer to run.

-> s

Initial state.

-> Result (Description d) a 

Run a consumer.

describe Source

Arguments

:: Consumer s d 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

:: Consumer s d a

The consumer to run.

-> s

Initial state.

-> (Result (Description d) a, s) 

Run a consumer.

runDescription Source

Arguments

:: Consumer s d a

The consumer to run.

-> s

Initial state. Can be empty if you don't use it for generating descriptions.

-> (Description d, s)

A description and resultant state.

Describe a consumer.

Types

data Description a Source

Description of a consumable thing.

Instances

data Bound Source

The bounds of a many-consumable thing.

Instances

data Consumer s d a Source

A consumer.

Constructors

Consumer 

Fields

consumerDesc :: s -> (Description d, s)
 
consumerParse :: s -> (Result (Description d) a, s)
 

Instances

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 
(Eq e, Eq a) => Eq (Result e a) 
(Ord e, Ord a) => Ord (Result e a) 
(Show e, Show a) => Show (Result e a) 
Monoid a => Monoid (Result (Description d) a) 

Combinators

consumer Source

Arguments

:: (s -> (Description d, s))

Produce description based on the state.

-> (s -> (Result (Description d) a, s))

Parse the state and maybe transform it if desired.

-> Consumer s d a 

Make a consumer.

wrap Source

Arguments

:: (s -> (t -> (Description d, t)) -> (Description d, s))

Transformer the description.

-> (s -> (t -> (Description d, t)) -> (t -> (Result (Description d) a, t)) -> (Result (Description d) b, s))

Transform the parser. Can re-run the parser if desired.

-> Consumer t d a

The consumer to transform.

-> Consumer s d b

A new consumer with a potentially new state type.

Wrap a consumer with another consumer.

sequencing :: [Consumer d s a] -> Consumer d s [a] Source

Compose contiguous items into one sequence. Similar to sequenceA.