pattern-arrows-0.0.1: Arrows for Pretty Printing

Safe HaskellNone

Control.PatternArrows

Description

Arrows for Pretty Printing

Synopsis

Documentation

newtype Pattern u a b Source

A first-order pattern match

A pattern is a Kleisli arrow for the StateT Maybe monad. That is, patterns can fail, and can carry user-defined state.

Constructors

Pattern 

Fields

runPattern :: Kleisli (StateT u Maybe) a b
 

pattern :: Pattern u a b -> u -> a -> Maybe bSource

Run a pattern with an input and initial user state

Returns Nothing if the pattern fails to match

mkPattern :: (a -> Maybe b) -> Pattern u a bSource

Construct a pattern from a function

mkPattern' :: (a -> StateT u Maybe b) -> Pattern u a bSource

Construct a pattern from a stateful function

chainl :: Pattern u a (a, a) -> (r -> r -> r) -> Pattern u a r -> Pattern u a rSource

Construct a pattern which recursively matches on the left-hand-side

chainr :: Pattern u a (a, a) -> (r -> r -> r) -> Pattern u a r -> Pattern u a rSource

Construct a pattern which recursively matches on the right-hand side

wrap :: Pattern u a (s, a) -> (s -> r -> r) -> Pattern u a r -> Pattern u a rSource

Construct a pattern which recursively matches on one-side of a tuple

split :: Pattern u a (s, t) -> (s -> t -> r) -> Pattern u a rSource

Construct a pattern which matches a part of a tuple

data OperatorTable u a r Source

A table of operators

Constructors

OperatorTable 

Fields

runOperatorTable :: [[Operator u a r]]
 

data Operator u a r whereSource

An operator:

AssocL
A left-associative operator
AssocR
A right-associative operator
Wrap
A prefix-like or postfix-like operator
Split
A prefix-like or postfix-like operator which does not recurse into its operand

Constructors

AssocL :: Pattern u a (a, a) -> (r -> r -> r) -> Operator u a r 
AssocR :: Pattern u a (a, a) -> (r -> r -> r) -> Operator u a r 
Wrap :: Pattern u a (s, a) -> (s -> r -> r) -> Operator u a r 
Split :: Pattern u a (s, t) -> (s -> t -> r) -> Operator u a r 

buildPrettyPrinter :: OperatorTable u a r -> Pattern u a r -> Pattern u a rSource

Build a pretty printer from an operator table and an indecomposable pattern