HORIZON HASKELLDocslts/ghc-10.0.x04404a62026-10-19Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 04404a6 · 2026-10-19

Modulepretty-1.1.3.6Haskell98

Text.PrettyPrint.HughesPJ

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.

Contents
  1. The document type
  2. Constructing documents
  3. Converting values into documents
  4. Simple derived documents
  5. Wrapping documents in delimiters
  6. Combining documents
  7. Predicates on documents
  8. Utility functions for documents
  9. Rendering documents
  10. Default rendering
  11. Rendering with a particular style
  12. General rendering
Synopsis
  • Packagepretty-1.1.3.6
  • Exports57
  • LanguageHaskell98
  • LicenceBSD-3-Clause
  • SourceHughesPJ.hs

The document type

newtypenewtype Doc

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.

Instances8Eq, Show, IsString, Generic, Semigroup, Monoid, …
datadata TextDetails

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.

Instances5Eq, Show, Generic, NFData, Rep

Constructing documents

Converting values into documents

valuechar :: Char -> Doc

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

valuetext :: 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.

Simple derived documents

Wrapping documents in delimiters

Combining documents

value($$) :: 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

$$ is associative, with identity empty, and also satisfies

  • (x $$ y) <> z = x $$ (y <> z), if y non-empty.

Predicates on documents

Utility functions for documents

valuefirst :: Doc -> Doc -> Doc

first returns its first argument if it is non-empty, otherwise its second.

Rendering documents

Default rendering

Rendering with a particular style

datadata Style

A rendering style. Allows us to specify constraints to choose among the many different rendering options.

Constructors

  • Style
    • mode :: Mode

      The rendering mode.

    • lineLength :: Int

      Maximum length of a line, in characters.

    • ribbonsPerLine :: Float

      Ratio of line length to ribbon length. A ribbon refers to the characters on a line excluding indentation. So a lineLength of 100, with a ribbonsPerLine of 2.0 would only allow up to 50 characters of ribbon to be displayed on a line, while allowing it to be indented up to 50 characters.

Instances4Eq, Show, Generic, Rep
valuestyle :: Style

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

datadata Mode

Rendering mode.

Constructors

Instances4Eq, Show, Generic, Rep

General rendering

valuefullRender
  1. :: Mode

    Rendering mode.

  2. -> Int

    Line length.

  3. -> Float

    Ribbons per line.

  4. -> (TextDetails -> a -> a)

    What to do with text.

  5. -> a

    What to do at the end.

  6. -> Doc

    The document.

  7. -> a

    Result.

The general rendering interface. Please refer to the Style and Mode types for a description of rendering mode, line length and ribbons.