package pretty_expressive

  1. Overview
  2. Docs

The cost factory interface.

A valid cost factory should also satisfy the following contracts.

  • le is a total ordering.
  • If le a b and le c d then le (combine a c) (combine b d)
  • If a <= b, then le (text a l) (text b l)
  • If a <= b, then le (newline a) (newline b)
  • text c (a + b) = combine (text c a) (text (c + a) b)
  • combine is associative and has the identity equal to text 0 0
  • text c 0 = text 0 0 for any c

The following contracts are required if two_columns is used.

  • If a <= b, then le (two_columns_bias a) (two_columns_bias b)
  • If a <= b, then le (two_columns_overflow a) (two_columns_overflow b)

See default_cost_factory, the cost factory section, and the paper for examples of cost factories.

type t

A type for cost

val text : int -> int -> t

text c l calculates a cost for a text placement at column position c with length l

val newline : int -> t

newline i calculates a cost for a newline and indentation at level i

val combine : t -> t -> t

combine x y combines the costs x and y together

val le : t -> t -> bool

le x y tests if the cost x is less than or equal to the cost y.

val two_columns_bias : int -> t

two_columns_bias i is the bias cost, added to each possible column separator so that the leftmost column separator is preferred.

val two_columns_overflow : int -> t

two_columns_overflow i is the cost due to exceeding the column separator. Make this cost greater than the usual overflow cost (for exceeding the page width limit) to prefer going over the page width limit instead of going over the column separator.

val limit : int

limit is the computation width limit.

val string_of_cost : t -> string

string_of_cost c produces a string representation of a cost c

val debug_format : string -> bool -> string -> string

debug_format s is_tainted cost produces a debugging string from the output of the core printer.

OCaml

Innovation. Community. Security.