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