Hets - the Heterogeneous Tool Set

Safe HaskellSafe

Common.Lib.Pretty

Contents

Synopsis

The document type

data Doc Source #

The abstract type of documents. The Show instance is equivalent to using render.

Instances

Show Doc Source # 

Methods

showsPrec :: Int -> Doc -> ShowS

show :: Doc -> String

showList :: [Doc] -> ShowS

IsString Doc Source # 

Methods

fromString :: String -> Doc

Monoid Doc Source # 

Methods

mempty :: Doc

mappend :: Doc -> Doc -> Doc

mconcat :: [Doc] -> Doc

Constructing documents

Converting values into documents

char :: Char -> Doc Source #

A document of height and width 1, containing a literal character.

text :: String -> Doc Source #

ptext :: String -> Doc Source #

An obsolete function, now identical to text.

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

int :: Int -> Doc Source #

int n = text (show n)

integer :: Integer -> Doc Source #

integer n = text (show n)

float :: Float -> Doc Source #

float n = text (show n)

double :: Double -> Doc Source #

double n = text (show n)

rational :: Rational -> Doc Source #

rational n = text (show n)

Simple derived documents

semi :: Doc Source #

A ';' character

comma :: Doc Source #

A ',' character

colon :: Doc Source #

A : character

space :: Doc Source #

A space character

equals :: Doc Source #

A '=' character

lparen :: Doc Source #

A '(' character

rparen :: Doc Source #

A ')' character

lbrack :: Doc Source #

A '[' character

rbrack :: Doc Source #

A ']' character

lbrace :: Doc Source #

A '{' character

rbrace :: Doc Source #

A '}' character

Wrapping documents in delimiters

parens :: Doc -> Doc Source #

Wrap document in (...)

brackets :: Doc -> Doc Source #

Wrap document in [...]

braces :: Doc -> Doc Source #

Wrap document in {...}

quotes :: Doc -> Doc Source #

Wrap document in '...'

doubleQuotes :: Doc -> Doc Source #

Wrap document in "..."

Combining documents

empty :: Doc Source #

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.

hcat :: [Doc] -> Doc Source #

List version of <>.

hsep :: [Doc] -> Doc Source #

List version of <+>.

($$) :: Doc -> Doc -> Doc infixl 5 Source #

($+$) :: Doc -> Doc -> Doc infixl 5 Source #

Above, with no overlapping. $+$ is associative, with identity empty.

vcat :: [Doc] -> Doc Source #

List version of $$.

sep :: [Doc] -> Doc Source #

Either hsep or vcat.

cat :: [Doc] -> Doc Source #

Either hcat or vcat.

fsep :: [Doc] -> Doc Source #

"Paragraph fill" version of sep.

fcat :: [Doc] -> Doc Source #

"Paragraph fill" version of cat.

nest :: Int -> Doc -> Doc Source #

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

isEmpty :: Doc -> Bool Source #

Returns True if the document is empty

Rendering documents

Default rendering

render :: Doc -> String Source #

Renders the document as a string using the default style.

Rendering with a particular style

data Style Source #

A rendering style.

Constructors

Style 

Fields

style :: Style Source #

The default style (mode=PageMode, lineLength=100, ribbonsPerLine=1.5).

renderStyle :: Style -> Doc -> String Source #

Render the document as a string using a specified style.

General rendering

fullRender Source #

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.

data Mode Source #

Rendering mode.

Constructors

PageMode

Normal

ZigZagMode

With zig-zag cuts

LeftMode

No indentation, infinitely long lines

OneLineMode

All on one line

data TextDetails Source #

The TextDetails data type

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.