sig
  type wrap =
      [ `Always_wrap | `Force_breaks | `Never_wrap | `No_breaks | `Wrap_atoms ]
  type style_name = string
  type style = { tag_open : string; tag_close : string; }
  type atom_param = { atom_style : Easy_format.style_name option; }
  val atom : Easy_format.atom_param
  type list_param = {
    space_after_opening : bool;
    space_after_separator : bool;
    space_before_separator : bool;
    separators_stick_left : bool;
    space_before_closing : bool;
    stick_to_label : bool;
    align_closing : bool;
    wrap_body : Easy_format.wrap;
    indent_body : int;
    list_style : Easy_format.style_name option;
    opening_style : Easy_format.style_name option;
    body_style : Easy_format.style_name option;
    separator_style : Easy_format.style_name option;
    closing_style : Easy_format.style_name option;
  }
  val list : Easy_format.list_param
  type label_param = {
    space_after_label : bool;
    indent_after_label : int;
    label_style : Easy_format.style_name option;
  }
  val label : Easy_format.label_param
  type t =
      Atom of string * Easy_format.atom_param
    | List of (string * string * string * Easy_format.list_param) *
        Easy_format.t list
    | Label of (Easy_format.t * Easy_format.label_param) * Easy_format.t
    | Custom of (Format.formatter -> unit)
  type escape =
      [ `Escape of
          (string -> int -> int -> unit) -> string -> int -> int -> unit
      | `Escape_string of string -> string
      | `None ]
  type styles = (Easy_format.style_name * Easy_format.style) list
  module Pretty :
    sig
      val define_styles :
        Format.formatter -> Easy_format.escape -> Easy_format.styles -> unit
      val to_formatter : Format.formatter -> Easy_format.t -> unit
      val to_buffer :
        ?escape:Easy_format.escape ->
        ?styles:Easy_format.styles -> Buffer.t -> Easy_format.t -> unit
      val to_string :
        ?escape:Easy_format.escape ->
        ?styles:Easy_format.styles -> Easy_format.t -> string
      val to_channel :
        ?escape:Easy_format.escape ->
        ?styles:Easy_format.styles ->
        Pervasives.out_channel -> Easy_format.t -> unit
      val to_stdout :
        ?escape:Easy_format.escape ->
        ?styles:Easy_format.styles -> Easy_format.t -> unit
      val to_stderr :
        ?escape:Easy_format.escape ->
        ?styles:Easy_format.styles -> Easy_format.t -> unit
    end
  module Compact :
    sig
      val to_buffer : Buffer.t -> Easy_format.t -> unit
      val to_string : Easy_format.t -> string
      val to_channel : Pervasives.out_channel -> Easy_format.t -> unit
      val to_stdout : Easy_format.t -> unit
      val to_stderr : Easy_format.t -> unit
      val to_formatter : Format.formatter -> Easy_format.t -> unit
    end
  module Param :
    sig
      val list_true : Easy_format.list_param
      val label_true : Easy_format.label_param
      val list_false : Easy_format.list_param
      val label_false : Easy_format.label_param
    end
end