Text.PrettyPrint.HughesPJ
Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | David Terei <[email protected]> |
Stability | stable |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell98 |
Contents
Description
Provides a collection of pretty printer combinators, a set of API's that provides a way to easily print out text in a consistent format of your choosing.
Originally designed by John Hughes's and Simon Peyton Jones's.
For more information you can refer to the original paper that serves as the basis for this libraries design: /The Design of a Pretty-printing Library/ by John Hughes, in Advanced Functional Programming, 1995.
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.
Instances
data TextDetails Source
A TextDetails represents a fragment of text that will be output at some point in a Doc
.
Constructors
Chr !Char | A single Char fragment |
Str String | A whole String fragment |
PStr String | Used to represent a Fast String fragment but now deprecated and identical to the Str constructor. |
Instances
Constructing documents
Converting values into documents
A document of height and width 1, containing a literal character.
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.
Same as text
. Used to be used for Bytestrings.
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
Arguments
:: Doc | A ';' character |
Arguments
:: Doc | A ',' character |
Arguments
:: Doc | A |
Arguments
:: Doc | A space character |
Arguments
:: Doc | A '=' character |
Arguments
:: Doc | A '(' character |
Arguments
:: Doc | A ')' character |
Arguments
:: Doc | A '[' character |
Arguments
:: Doc | A ']' character |
Arguments
:: Doc | A '{' character |
Arguments
:: Doc | A '}' character |
Wrapping documents in delimiters
maybeParens :: Bool -> Doc -> Doc Source
Apply parens
to Doc
if boolean is true.
maybeBrackets :: Bool -> Doc -> Doc Source
Apply brackets
to Doc
if boolean is true.
maybeBraces :: Bool -> Doc -> Doc Source
Apply braces
to Doc
if boolean is true.
maybeQuotes :: Bool -> Doc -> Doc Source
Apply quotes
to Doc
if boolean is true.
maybeDoubleQuotes :: Bool -> Doc -> Doc Source
Apply doubleQuotes
to Doc
if boolean is true.
Combining documents
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 infixl 6 Source
Beside. <>
is associative, with identity empty
.
(<+>) :: Doc -> Doc -> Doc infixl 6 Source
Beside, separated by space, unless one of the arguments is empty
. <+>
is associative, with identity empty
.
List version of <>
.
List version of <+>
.
($$) :: 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
$$
is associative, with identity empty
, and also satisfies
($+$) :: Doc -> Doc -> Doc infixl 5 Source
Above, with no overlapping. $+$
is associative, with identity empty
.
List version of $$
.
"Paragraph fill" version of sep
.
"Paragraph fill" version of cat
.
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 = x
nest k (nest k' x) = nest (k+k') x
nest k (x <> y) = nest k x <> nest k y
nest k (x $$ y) = nest k x $$ nest k y
nest k empty = empty
-
x <> nest k y = x <> y
, ifx
non-empty
The side condition on the last law is needed because empty
is a left identity for <>
.
hang :: Doc -> Int -> Doc -> Doc Source
hang d1 n d2 = sep [d1, nest n d2]
punctuate :: Doc -> [Doc] -> [Doc] Source
punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn]
Predicates on documents
Returns True
if the document is empty
Utility functions for documents
first :: Doc -> Doc -> Doc Source
first
returns its first argument if it is non-empty, otherwise its second.
reduceDoc :: Doc -> RDoc Source
Perform some simplification of a built up GDoc
.
Rendering documents
Default rendering
render :: Doc -> String Source
Render the Doc
to a String using the default Style
(see style
).
Rendering with a particular style
A rendering style. Allows us to specify constraints to choose among the many different rendering options.
Constructors
Style | |
Fields
|
Instances
Eq Style | |
Show Style | |
Generic Style | |
type Rep Style | |
Defined in Text.PrettyPrint.Annotated.HughesPJ type Rep Style = D1 ('MetaData "Style" "Text.PrettyPrint.Annotated.HughesPJ" "pretty-1.1.3.6" 'False) (C1 ('MetaCons "Style" 'PrefixI 'True) (S1 ('MetaSel ('Just "mode") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Mode) :*: (S1 ('MetaSel ('Just "lineLength") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "ribbonsPerLine") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Float)))) |
The default style (mode=PageMode, lineLength=100, ribbonsPerLine=1.5
).
renderStyle :: Style -> Doc -> String Source
Render the Doc
to a String using the given Style
.
Rendering mode.
Constructors
PageMode | Normal rendering ( |
ZigZagMode | With zig-zag cuts. |
LeftMode | No indentation, infinitely long lines ( |
OneLineMode | All on one line, |
Instances
Eq Mode | |
Show Mode | |
Generic Mode | |
type Rep Mode | |
Defined in Text.PrettyPrint.Annotated.HughesPJ type Rep Mode = D1 ('MetaData "Mode" "Text.PrettyPrint.Annotated.HughesPJ" "pretty-1.1.3.6" 'False) ((C1 ('MetaCons "PageMode" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ZigZagMode" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "LeftMode" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OneLineMode" 'PrefixI 'False) (U1 :: Type -> Type))) |
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. Please refer to the Style
and Mode
types for a description of rendering mode, line length and ribbons.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/pretty-1.1.3.6/Text-PrettyPrint-HughesPJ.html