| ||||||||||||||||||
| ||||||||||||||||||
| ||||||||||||||||||
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 | ||||||||||||||||||
The document type | ||||||||||||||||||
data Doc | ||||||||||||||||||
| ||||||||||||||||||
Constructing documents | ||||||||||||||||||
Converting values into documents | ||||||||||||||||||
char :: Char -> Doc | ||||||||||||||||||
A document of height and width 1, containing a literal character. | ||||||||||||||||||
text :: String -> Doc | ||||||||||||||||||
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 -> Doc | ||||||||||||||||||
An obsolete function, now identical to text. | ||||||||||||||||||
zeroWidthText :: String -> Doc | ||||||||||||||||||
Some text, but without any width. Use for non-printing text such as a HTML or Latex tags | ||||||||||||||||||
int :: Int -> Doc | ||||||||||||||||||
int n = text (show n) | ||||||||||||||||||
integer :: Integer -> Doc | ||||||||||||||||||
integer n = text (show n) | ||||||||||||||||||
float :: Float -> Doc | ||||||||||||||||||
float n = text (show n) | ||||||||||||||||||
double :: Double -> Doc | ||||||||||||||||||
double n = text (show n) | ||||||||||||||||||
rational :: Rational -> Doc | ||||||||||||||||||
rational n = text (show n) | ||||||||||||||||||
Simple derived documents | ||||||||||||||||||
semi :: Doc | ||||||||||||||||||
A ';' character | ||||||||||||||||||
comma :: Doc | ||||||||||||||||||
A ',' character | ||||||||||||||||||
colon :: Doc | ||||||||||||||||||
A ':' character | ||||||||||||||||||
space :: Doc | ||||||||||||||||||
A space character | ||||||||||||||||||
equals :: Doc | ||||||||||||||||||
A '=' character | ||||||||||||||||||
lparen :: Doc | ||||||||||||||||||
A '(' character | ||||||||||||||||||
rparen :: Doc | ||||||||||||||||||
A ')' character | ||||||||||||||||||
lbrack :: Doc | ||||||||||||||||||
A '[' character | ||||||||||||||||||
rbrack :: Doc | ||||||||||||||||||
A ']' character | ||||||||||||||||||
lbrace :: Doc | ||||||||||||||||||
A '{' character | ||||||||||||||||||
rbrace :: Doc | ||||||||||||||||||
A '}' character | ||||||||||||||||||
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 | ||||||||||||||||||
empty :: Doc | ||||||||||||||||||
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 -> Doc | ||||||||||||||||||
Beside. <> is associative, with identity empty. | ||||||||||||||||||
(<+>) :: Doc -> Doc -> Doc | ||||||||||||||||||
Beside, separated by space, unless one of the arguments is empty. <+> is associative, with identity empty. | ||||||||||||||||||
hcat :: [Doc] -> Doc | ||||||||||||||||||
List version of <>. | ||||||||||||||||||
hsep :: [Doc] -> Doc | ||||||||||||||||||
List version of <+>. | ||||||||||||||||||
($$) :: Doc -> Doc -> Doc | ||||||||||||||||||
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 | ||||||||||||||||||
($+$) :: Doc -> Doc -> Doc | ||||||||||||||||||
Above, with no overlapping. $+$ is associative, with identity empty. | ||||||||||||||||||
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 | ||||||||||||||||||
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 -> 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 -> Bool | ||||||||||||||||||
Returns True if the document is empty | ||||||||||||||||||
Rendering documents | ||||||||||||||||||
Default rendering | ||||||||||||||||||
render :: Doc -> String | ||||||||||||||||||
Renders the document as a string using the default style. | ||||||||||||||||||
Rendering with a particular style | ||||||||||||||||||
data Style | ||||||||||||||||||
| ||||||||||||||||||
style :: Style | ||||||||||||||||||
The default style (mode=PageMode, lineLength=100, ribbonsPerLine=1.5). | ||||||||||||||||||
renderStyle :: Style -> Doc -> String | ||||||||||||||||||
Render the document as a string using a specified style. | ||||||||||||||||||
General rendering | ||||||||||||||||||
fullRender | ||||||||||||||||||
| ||||||||||||||||||
data Mode | ||||||||||||||||||
| ||||||||||||||||||
data TextDetails | ||||||||||||||||||
| ||||||||||||||||||
Produced by Haddock version 2.3.0 |