|
| Text.PrettyPrint.HughesPJ | | Portability | portable | | Stability | provisional | | Maintainer | libraries@haskell.org |
|
|
|
|
|
| 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 |
| The abstract type of documents
| Instances | |
|
|
| 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
|
|
| 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 |
| Beside
|
|
| (<+>) :: Doc -> Doc -> Doc |
| Beside, separated by space
|
|
| hcat :: [Doc] -> Doc |
| List version of <>
|
|
| hsep :: [Doc] -> Doc |
| List version of <+>
|
|
| ($$) :: Doc -> Doc -> Doc |
| Above; if there is no
overlap it "dovetails" the two
|
|
| ($+$) :: Doc -> Doc -> Doc |
| 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 -> 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 |
| A rendering style
| | Constructors | | Style | | | mode :: Mode | The rendering mode
| | lineLength :: Int | Length of line, in chars
| | ribbonsPerLine :: Float | Ratio of ribbon length to line length
|
|
|
|
|
| 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 |
| :: Mode | Rendering mode
| | -> Int | Line length
| | -> Float | Ribbons per line
| | -> (TextDetails -> a -> a) | What to do with text
| | -> a | What to do at the end
| | -> Doc | The document
| | -> a | Result
| | The general rendering interface
|
|
|
| data Mode |
| Rendering mode
| | Constructors | | PageMode | Normal
| | ZigZagMode | With zig-zag cuts
| | LeftMode | No indentation, infinitely long lines
| | OneLineMode | All on one line
|
|
|
|
| data TextDetails |
|
|
| Produced by Haddock version 0.7 |