sig
  type document
  val empty : PPrintEngine.document
  val char : char -> PPrintEngine.document
  val string : string -> PPrintEngine.document
  val substring : string -> int -> int -> PPrintEngine.document
  val fancystring : string -> int -> PPrintEngine.document
  val fancysubstring : string -> int -> int -> int -> PPrintEngine.document
  val utf8string : string -> PPrintEngine.document
  val hardline : PPrintEngine.document
  val blank : int -> PPrintEngine.document
  val break : int -> PPrintEngine.document
  val ( ^^ ) :
    PPrintEngine.document -> PPrintEngine.document -> PPrintEngine.document
  val nest : int -> PPrintEngine.document -> PPrintEngine.document
  val group : PPrintEngine.document -> PPrintEngine.document
  val column : (int -> PPrintEngine.document) -> PPrintEngine.document
  val nesting : (int -> PPrintEngine.document) -> PPrintEngine.document
  val ifflat :
    PPrintEngine.document -> PPrintEngine.document -> PPrintEngine.document
  module ToChannel :
    sig
      type channel = out_channel
      type document = document
      val pretty : float -> int -> channel -> document -> unit
      val compact : channel -> document -> unit
    end
  module ToBuffer :
    sig
      type channel = Buffer.t
      type document = document
      val pretty : float -> int -> channel -> document -> unit
      val compact : channel -> document -> unit
    end
  module ToFormatter :
    sig
      type channel = Format.formatter
      type document = document
      val pretty : float -> int -> channel -> document -> unit
      val compact : channel -> document -> unit
    end
end