Skip to main content Link Search Menu Expand Document (external link)

Optimize overview

Added in v1.0.0


Table of contents


instances

Deep

Signature

export declare const Deep: FusionDepth

Added in v1.0.0

Shallow

Signature

export declare const Shallow: FusionDepth

Added in v1.0.0

model

Deep (interface)

Instructs the document fusion optimizer to recurse into all leaves of the document tree, including different layout alternatives and all location-sensitive values (i.e. those created by nesting), which cannot be fused before, but only during, the layout process. As a result, the performance cost of using deep document fusion optimization is often hard to predict and depends on the interplay between page layout and the document that is to be pretty printed.

This value should only be utilized if profiling demonstrates that it is significantly faster than using Shallow.

Signature

export interface Deep {
  readonly _tag: "Deep"
}

Added in v1.0.0

FusionDepth (type alias)

Represents an instruction that determines how deeply the document fusion optimizer should traverse the document tree.

Signature

export type FusionDepth = Shallow | Deep

Added in v1.0.0

Optimize (interface)

Represents optimization of a given document tree through fusion of redundant document nodes.

Signature

export interface Optimize<A> {
  (depth: Optimize.Depth): Doc<A>
}

Added in v1.0.0

Shallow (interface)

Instructs the document fusion optimizer to avoid diving deeply into nested documents, fusing mostly concatenations of text nodes together.

Signature

export interface Shallow {
  readonly _tag: "Shallow"
}

Added in v1.0.0

optimization

optimize

The optimize function will combine text nodes so that they can be rendered more efficiently. An optimized document is always laid out in an identical manner to its un-optimized counterpart.

When laying a Doc out to a SimpleDocStream, every component of the input document is translated directly to the simpler output format. This sometimes yields undesirable chunking when many pieces have been concatenated together.

It is therefore a good idea to run fuse on concatenations of lots of small strings that are used many times.

Signature

export declare const optimize: {
  (depth: FusionDepth): <A>(self: Doc<A>) => Doc<A>
  <A>(self: Doc<A>, depth: FusionDepth): Doc<A>
}

Example

import * as Doc from "@effect/printer/Doc"
import * as Optimize from "@effect/printer/Optimize"

// The document below contains a chain of four entries in the output `DocStream`
const inefficient = Doc.hsep([Doc.char("a"), Doc.char("b"), Doc.char("c"), Doc.char("d")])

// However, the above document is fully equivalent to the tightly packed
// document below which is only a single entry in the output `DocStream` and
// can be processed much more efficiently.
const efficient = Doc.text("abcd")

// We can optimize the `inefficient` document using `Optimize`
Optimize.optimize(Optimize.Deep)(inefficient)

Added in v1.0.0

utils

Optimize (namespace)

Added in v1.0.0

Depth (type alias)

Signature

export type Depth = FusionDepth

Added in v1.0.0