GHC.Utils.Ppr
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.cse.chalmers.se/~rjmh/Papers/pretty.ps
The document type
The abstract type of documents. A Doc represents a *set* of layouts. A Doc with no occurrences of Union or NoDoc represents just one layout.
data TextDetails Source #
The TextDetails data type
A TextDetails represents a fragment of text that will be output at some point.
Constructing documents
Converting values into documents
ftext :: FastString -> Doc Source #
ztext :: FastZString -> Doc Source #
sizedText :: Int -> String -> Doc Source #
Some text with any width. (text s = sizedText (length s) s
)
zeroWidthText :: String -> Doc Source #
Some text, but without any width. Use for non-printing text such as a HTML or Latex tags
Simple derived documents
Wrapping documents in delimiters
Combining documents
($$) :: Doc -> Doc -> Doc infixl 5 Source #
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
nest :: Int -> Doc -> Doc Source #
Nest (or indent) a document by a given number of positions
(which may also be negative). nest
satisfies the laws:
nest
0 x = xnest
k (nest
k' x) =nest
(k+k') xnest
k (x<>
y) =nest
k z<>
nest
k ynest
k (x$$
y) =nest
k x$$
nest
k ynest
kempty
=empty
x
, if<>
nest
k y = x<>
yx
non-empty
The side condition on the last law is needed because
empty
is a left identity for <>
.
punctuate :: Doc -> [Doc] -> [Doc] Source #
punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]
Predicates on documents
Rendering documents
Rendering with a particular style
A rendering style.
Constructors
Style | |
Fields
|
Rendering mode.
Constructors
PageMode | Normal |
Fields
| |
ZigZagMode | With zig-zag cuts |
LeftMode | No indentation, infinitely long lines |
OneLineMode | All on one line |
General rendering
Arguments
:: 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.
txtPrinter :: TextDetails -> String -> String Source #
Default TextDetails printer