| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
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. | ||||||||||||||||
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 0.7 |