HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleghc-9.10.3GHC2021

GHC.JS.Ppr

  • Domain and Purpose

    GHC.JS.Ppr defines the code generation facilities for the JavaScript backend. That is, this module exports a function from the JS backend IR to JavaScript compliant concrete syntax that can readily be executed by nodejs or called in a browser.

  • Design

    This module follows the architecture and style of the other backends in GHC: it intances Outputable for the relevant types, creates a class that describes a morphism from the IR domain to JavaScript concrete Syntax and then generates that syntax on a case by case basis.

  • How to use

    The key functions are renderJS, jsToDoc, and the RenderJS record. Use the RenderJS record and jsToDoc to define a custom renderers for specific parts of the backend, for example in GHC.StgToJS.Linker.Opt a custom renderer ensures all Ident generated by the linker optimization pass are prefixed differently than the default. Use renderJS to generate JavaScript concrete syntax in the general case, suitable for human consumption.

  • 1 type
  • 2 classes
  • 9 values
  • Packageghc-9.10.3
  • Exports12
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourcePpr.hs
valuerenderJs :: JsToDoc a => a -> SDoc
#

Render a syntax tree as a pretty-printable document (simply showing the resultant doc produces a nice, well formatted String).

valuerenderPrefixJs :: JsToDoc a => a -> SDoc
#

Render a syntax tree as a pretty-printable document, using a given prefix to all generated names. Use this with distinct prefixes to ensure distinct generated names between independent calls to render(Prefix)Js.

classclass IsLine doc => JsRender doc where
#

JsRender controls the differences in whitespace between HLine and SDoc. Generally, this involves the indentation and newlines in the human-readable SDoc implementation being replaced in the HLine version by the minimal whitespace required for valid JavaScript syntax.

Methods

  • (<+?>) :: doc -> doc -> doc

    Concatenate with an optional single space

  • ($$$) :: doc -> doc -> doc

    Concatenate with an optional newline

  • jcat :: [doc] -> doc

    Concatenate these docs, either vertically (SDoc) or horizontally (HLine)

  • jnest :: doc -> doc

    Optionally indent the following

  • addSemi :: doc -> doc

    Append semi-colon (and line-break in HLine mode)

Instances2JsRender
valuebraceNest :: JsRender doc => doc -> doc
#

The structure `{body}`, optionally indented over multiple lines

valuehangBrace :: JsRender doc => doc -> doc -> doc
#

The structure `hdr {body}`, optionally indented over multiple lines

Orphan instances

2 instances