pretty-1.0.0.0: Pretty-printing librarySource codeContentsIndex
Text.PrettyPrint.HughesPJ
Portabilityportable
Stabilityprovisional
Maintainerlibraries@haskell.org
Contents
The document type
Constructing documents
Converting values into documents
Simple derived documents
Wrapping documents in delimiters
Combining documents
Predicates on documents
Rendering documents
Default rendering
Rendering with a particular style
General rendering
Description

John Hughes's and Simon Peyton Jones's Pretty Printer Combinators

Based on The Design of a Pretty-printing Library in Advanced Functional Programming, Johan Jeuring and Erik Meijer (eds), LNCS 925 http://www.cs.chalmers.se/~rjmh/Papers/pretty.ps

Heavily modified by Simon Peyton Jones, Dec 96

Synopsis
data Doc
char :: Char -> Doc
text :: String -> Doc
ptext :: String -> Doc
int :: Int -> Doc
integer :: Integer -> Doc
float :: Float -> Doc
double :: Double -> Doc
rational :: Rational -> Doc
semi :: Doc
comma :: Doc
colon :: Doc
space :: Doc
equals :: Doc
lparen :: Doc
rparen :: Doc
lbrack :: Doc
rbrack :: Doc
lbrace :: Doc
rbrace :: Doc
parens :: Doc -> Doc
brackets :: Doc -> Doc
braces :: Doc -> Doc
quotes :: Doc -> Doc
doubleQuotes :: Doc -> Doc
empty :: 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 -> Bool
render :: Doc -> String
data Style = Style {
mode :: Mode
lineLength :: Int
ribbonsPerLine :: Float
}
style :: Style
renderStyle :: Style -> Doc -> String
fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc -> a
data Mode
= PageMode
| ZigZagMode
| LeftMode
| OneLineMode
data TextDetails
= Chr Char
| Str String
| PStr String
The document type
data Doc Source
The abstract type of documents. The Show instance is equivalent to using render.
show/hide Instances
Constructing documents
Converting values into documents
char :: Char -> DocSource
A document of height and width 1, containing a literal character.
text :: String -> DocSource

A document of height 1 containing a literal string. text satisfies the following laws:

The side condition on the last law is necessary because text "" has height 1, while empty has no height.

ptext :: String -> DocSource
An obsolete function, now identical to text.
int :: Int -> DocSource
int n = text (show n)
integer :: Integer -> DocSource
integer n = text (show n)
float :: Float -> DocSource
float n = text (show n)
double :: Double -> DocSource
double n = text (show n)
rational :: Rational -> DocSource
rational n = text (show n)
Simple derived documents
semi :: DocSource
A ';' character
comma :: DocSource
A ',' character
colon :: DocSource
A ':' character
space :: DocSource
A space character
equals :: DocSource
A '=' character
lparen :: DocSource
A '(' character
rparen :: DocSource
A ')' character
lbrack :: DocSource
A '[' character
rbrack :: DocSource
A ']' character
lbrace :: DocSource
A '{' character
rbrace :: DocSource
A '}' character
Wrapping documents in delimiters
parens :: Doc -> DocSource
Wrap document in (...)
brackets :: Doc -> DocSource
Wrap document in [...]
braces :: Doc -> DocSource
Wrap document in {...}
quotes :: Doc -> DocSource
Wrap document in '...'
doubleQuotes :: Doc -> DocSource
Wrap document in "..."
Combining documents
empty :: DocSource
The empty document, with no height and no width. empty is the identity for <>, <+>, $$ and $+$, and anywhere in the argument list for sep, hcat, hsep, vcat, fcat etc.
(<>) :: Doc -> Doc -> DocSource
Beside. <> is associative, with identity empty.
(<+>) :: Doc -> Doc -> DocSource
Beside, separated by space, unless one of the arguments is empty. <+> is associative, with identity empty.
hcat :: [Doc] -> DocSource
List version of <>.
hsep :: [Doc] -> DocSource
List version of <+>.
($$) :: Doc -> Doc -> DocSource

Above, except that if the last line of the first argument stops at least one position before the first line of the second begins, these two lines are overlapped. For example:

    text "hi" $$ nest 5 (text "there")

lays out as

    hi   there

rather than

    hi
         there

$$ is associative, with identity empty, and also satisfies

  • (x $$ y) <> z = x $$ (y <> z), if y non-empty.
($+$) :: Doc -> Doc -> DocSource
Above, with no overlapping. $+$ is associative, with identity empty.
vcat :: [Doc] -> DocSource
List version of $$.
sep :: [Doc] -> DocSource
Either hsep or vcat.
cat :: [Doc] -> DocSource
Either hcat or vcat.
fsep :: [Doc] -> DocSource
"Paragraph fill" version of sep.
fcat :: [Doc] -> DocSource
"Paragraph fill" version of cat.
nest :: Int -> Doc -> DocSource

Nest (or indent) a document by a given number of positions (which may also be negative). nest satisfies the laws:

The side condition on the last law is needed because empty is a left identity for <>.

hang :: Doc -> Int -> Doc -> DocSource
hang d1 n d2 = sep [d1, nest n d2]
punctuate :: Doc -> [Doc] -> [Doc]Source
punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]
Predicates on documents
isEmpty :: Doc -> BoolSource
Returns True if the document is empty
Rendering documents
Default rendering
render :: Doc -> StringSource
Renders the document as a string using the default style.
Rendering with a particular style
data Style Source
A rendering style.
Constructors
Style
mode :: ModeThe rendering mode
lineLength :: IntLength of line, in chars
ribbonsPerLine :: FloatRatio of ribbon length to line length
style :: StyleSource
The default style (mode=PageMode, lineLength=100, ribbonsPerLine=1.5).
renderStyle :: Style -> Doc -> StringSource
Render the document as a string using a specified style.
General rendering
fullRenderSource
:: ModeRendering mode
-> IntLine length
-> FloatRibbons per line
-> (TextDetails -> a -> a)What to do with text
-> aWhat to do at the end
-> DocThe document
-> aResult
The general rendering interface.
data Mode Source
Rendering mode.
Constructors
PageModeNormal
ZigZagModeWith zig-zag cuts
LeftModeNo indentation, infinitely long lines
OneLineModeAll on one line
data TextDetails Source
Constructors
Chr Char
Str String
PStr String
Produced by Haddock version 0.9