template-haskell-2.9.0.0: Support library for Template Haskell

Safe Haskell | None
Language | Haskell2010

Language.Haskell.TH.PprLib

Contents

- The document type
- Primitive Documents
- Converting values into documents
- Wrapping documents in delimiters
- Combining documents
- Predicates on documents

Description

Monadic front-end to Text.PrettyPrint

Synopsis

- type Doc = PprM Doc
- data PprM a
- empty :: Doc
- semi :: Doc
- comma :: Doc
- colon :: Doc
- space :: Doc
- equals :: Doc
- arrow :: Doc
- lparen :: Doc
- rparen :: Doc
- lbrack :: Doc
- rbrack :: Doc
- lbrace :: Doc
- rbrace :: Doc
- text :: String -> Doc
- char :: Char -> Doc
- ptext :: String -> Doc
- int :: Int -> Doc
- integer :: Integer -> Doc
- float :: Float -> Doc
- double :: Double -> Doc
- rational :: Rational -> Doc
- parens :: Doc -> Doc
- brackets :: Doc -> Doc
- braces :: Doc -> Doc
- quotes :: Doc -> Doc
- doubleQuotes :: Doc -> Doc
- (<>) :: Doc -> Doc -> Doc
- (<+>) :: Doc -> Doc -> Doc
- hcat :: [Doc] -> Doc
- hsep :: [Doc] -> Doc
- ($$) :: Doc -> Doc -> Doc
- ($+$) :: Doc -> Doc -> Doc
- vcat :: [Doc] -> Doc
- sep :: [Doc] -> Doc
- cat :: [Doc] -> Doc
- fsep :: [Doc] -> Doc
- fcat :: [Doc] -> Doc
- nest :: Int -> Doc -> Doc
- hang :: Doc -> Int -> Doc -> Doc
- punctuate :: Doc -> [Doc] -> [Doc]
- isEmpty :: Doc -> PprM Bool
- to_HPJ_Doc :: Doc -> Doc
- pprName :: Name -> Doc
- pprName' :: NameIs -> Name -> Doc

# The document type

type Doc = PprM Doc

data PprM a

Instances

Monad PprM |
Functor PprM |
Show Doc |
Applicative PprM |

# Primitive Documents

empty :: Doc

An empty document

semi :: Doc

A ';' character

comma :: Doc

A ',' character

colon :: Doc

A `:` character

space :: Doc

A space character

equals :: Doc

A '=' character

arrow :: Doc

A "->" string

lparen :: Doc

A '(' character

rparen :: Doc

A ')' character

lbrack :: Doc

A '[' character

rbrack :: Doc

A ']' character

lbrace :: Doc

A '{' character

rbrace :: Doc

A '}' character

# Converting values into documents

text :: String -> Doc

char :: Char -> Doc

ptext :: String -> Doc

int :: Int -> Doc

integer :: Integer -> Doc

float :: Float -> Doc

double :: Double -> Doc

rational :: Rational -> Doc

# Wrapping documents in delimiters

parens :: Doc -> Doc

Wrap document in `(...)`

brackets :: Doc -> Doc

Wrap document in `[...]`

braces :: Doc -> Doc

Wrap document in `{...}`

quotes :: Doc -> Doc

Wrap document in `'...'`

doubleQuotes :: Doc -> Doc

Wrap document in `"..."`

# Combining documents

(<>) :: Doc -> Doc -> Doc infixl 6

Beside

(<+>) :: Doc -> Doc -> Doc infixl 6

Beside, separated by space

hcat :: [Doc] -> Doc

List version of `<>`

hsep :: [Doc] -> Doc

List version of `<+>`

($$) :: Doc -> Doc -> Doc infixl 5

Above; if there is no overlap it "dovetails" the two

($+$) :: Doc -> Doc -> Doc infixl 5

Above, without dovetailing.

vcat :: [Doc] -> Doc

List version of `$$`

sep :: [Doc] -> Doc

Either hsep or vcat

cat :: [Doc] -> Doc

Either hcat or vcat

fsep :: [Doc] -> Doc

"Paragraph fill" version of sep

fcat :: [Doc] -> Doc

"Paragraph fill" version of cat

nest :: Int -> Doc -> Doc

Nested

hang :: Doc -> Int -> Doc -> Doc

    hang d1 n d2 = sep [d1, nest n d2]

punctuate :: Doc -> [Doc] -> [Doc]

    punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]

# Predicates on documents

isEmpty :: Doc -> PprM Bool

Returns `True` if the document is empty

to_HPJ_Doc :: Doc -> Doc

pprName :: Name -> Doc

pprName' :: NameIs -> Name -> Doc