sig
  module Doc :
    sig
      type box_type = H | V | HV | HoV | B
      type stag = Stdlib.Format.stag
      type element =
          Text of string
        | With_size of int
        | Open_box of { kind : Format_doc.Doc.box_type; indent : int; }
        | Close_box
        | Open_tag of Stdlib.Format.stag
        | Close_tag
        | Open_tbox
        | Tab_break of { width : int; offset : int; }
        | Set_tab
        | Close_tbox
        | Simple_break of { spaces : int; indent : int; }
        | Break of { fits : string * int * string;
            breaks : string * int * string;
          }
        | Flush of { newline : bool; }
        | Newline
        | If_newline
        | Deprecated of (Stdlib.Format.formatter -> unit)
      type t
      type ('a, 'b) fmt =
          ('a, Format_doc.Doc.t, Format_doc.Doc.t, 'b) Stdlib.format4
      type printer0 = Format_doc.Doc.t -> Format_doc.Doc.t
      type 'a printer = '-> Format_doc.Doc.printer0
      val empty : Format_doc.Doc.t
      val format : Stdlib.Format.formatter -> Format_doc.Doc.t -> unit
      val fold :
        ('acc -> Format_doc.Doc.element -> 'acc) ->
        'acc -> Format_doc.Doc.t -> 'acc
      val msg : ('a, Format_doc.Doc.t) Format_doc.Doc.fmt -> 'a
      val kmsg :
        (Format_doc.Doc.t -> 'b) -> ('a, 'b) Format_doc.Doc.fmt -> 'a
      val printf : ('a, Format_doc.Doc.printer0) Format_doc.Doc.fmt -> 'a
      val kprintf :
        (Format_doc.Doc.t -> 'b) ->
        ('a, Format_doc.Doc.t -> 'b) Format_doc.Doc.fmt -> 'a
      val open_box :
        Format_doc.Doc.box_type -> int -> Format_doc.Doc.printer0
      val close_box : Format_doc.Doc.printer0
      val text : string Format_doc.Doc.printer
      val string : string Format_doc.Doc.printer
      val bytes : bytes Format_doc.Doc.printer
      val with_size : int Format_doc.Doc.printer
      val int : int Format_doc.Doc.printer
      val float : float Format_doc.Doc.printer
      val char : char Format_doc.Doc.printer
      val bool : bool Format_doc.Doc.printer
      val space : Format_doc.Doc.printer0
      val cut : Format_doc.Doc.printer0
      val break : spaces:int -> indent:int -> Format_doc.Doc.printer0
      val custom_break :
        fits:string * int * string ->
        breaks:string * int * string -> Format_doc.Doc.printer0
      val force_newline : Format_doc.Doc.printer0
      val if_newline : Format_doc.Doc.printer0
      val flush : Format_doc.Doc.printer0
      val force_stop : Format_doc.Doc.printer0
      val open_tbox : Format_doc.Doc.printer0
      val set_tab : Format_doc.Doc.printer0
      val tab : Format_doc.Doc.printer0
      val tab_break : width:int -> offset:int -> Format_doc.Doc.printer0
      val close_tbox : Format_doc.Doc.printer0
      val open_tag : Format_doc.Doc.stag Format_doc.Doc.printer
      val close_tag : Format_doc.Doc.printer0
      val list :
        ?sep:Format_doc.Doc.printer0 ->
        'Format_doc.Doc.printer -> 'a list Format_doc.Doc.printer
      val iter :
        ?sep:Format_doc.Doc.printer0 ->
        iter:(('-> unit) -> '-> unit) ->
        'Format_doc.Doc.printer -> 'Format_doc.Doc.printer
      val array :
        ?sep:Format_doc.Doc.printer0 ->
        'Format_doc.Doc.printer -> 'a array Format_doc.Doc.printer
      val seq :
        ?sep:Format_doc.Doc.printer0 ->
        'Format_doc.Doc.printer -> 'Stdlib.Seq.t Format_doc.Doc.printer
      val option :
        ?none:Format_doc.Doc.printer0 ->
        'Format_doc.Doc.printer -> 'a option Format_doc.Doc.printer
      val result :
        ok:'Format_doc.Doc.printer ->
        error:'Format_doc.Doc.printer ->
        ('a, 'e) Stdlib.result Format_doc.Doc.printer
      val either :
        left:'Format_doc.Doc.printer ->
        right:'Format_doc.Doc.printer ->
        ('a, 'b) Stdlib.Either.t Format_doc.Doc.printer
    end
  type doc = Format_doc.Doc.t
  type t = Format_doc.doc
  type formatter
  type 'a printer = Format_doc.formatter -> '-> unit
  val formatter : Format_doc.doc Stdlib.ref -> Format_doc.formatter
  type 'a format_printer = Stdlib.Format.formatter -> '-> unit
  val compat : 'Format_doc.printer -> 'Format_doc.format_printer
  val compat1 :
    ('p1 -> 'Format_doc.printer) -> 'p1 -> 'Format_doc.format_printer
  val compat2 :
    ('p1 -> 'p2 -> 'Format_doc.printer) ->
    'p1 -> 'p2 -> 'Format_doc.format_printer
  val deprecated_printer :
    (Stdlib.Format.formatter -> unit) -> Format_doc.formatter -> unit
  val deprecated : 'Format_doc.format_printer -> 'Format_doc.printer
  val deprecated1 :
    ('p1 -> 'Format_doc.format_printer) -> 'p1 -> 'Format_doc.printer
  val fprintf :
    Format_doc.formatter ->
    ('a, Format_doc.formatter, unit) Stdlib.format -> 'a
  val kfprintf :
    (Format_doc.formatter -> 'a) ->
    Format_doc.formatter ->
    ('b, Format_doc.formatter, unit, 'a) Stdlib.format4 -> 'b
  val asprintf :
    ('a, Format_doc.formatter, unit, string) Stdlib.format4 -> 'a
  val kasprintf :
    (string -> 'a) ->
    ('b, Format_doc.formatter, unit, 'a) Stdlib.format4 -> 'b
  val dprintf :
    ('a, Format_doc.formatter, unit, Format_doc.formatter -> unit)
    Stdlib.format4 -> 'a
  val kdprintf :
    ((Format_doc.formatter -> unit) -> 'a) ->
    ('b, Format_doc.formatter, unit, 'a) Stdlib.format4 -> 'b
  val doc_printf :
    ('a, Format_doc.formatter, unit, Format_doc.doc) Stdlib.format4 -> 'a
  val kdoc_printf :
    (Format_doc.doc -> 'r) ->
    ('a, Format_doc.formatter, unit, 'r) Stdlib.format4 -> 'a
  val doc_printer : 'Format_doc.printer -> 'Format_doc.Doc.printer
  val pp_doc : Format_doc.doc Format_doc.printer
  val pp_print_string : string Format_doc.printer
  val pp_print_substring : pos:int -> len:int -> string Format_doc.printer
  val pp_print_text : string Format_doc.printer
  val pp_print_bytes : bytes Format_doc.printer
  val pp_print_as : Format_doc.formatter -> int -> string -> unit
  val pp_print_substring_as :
    pos:int -> len:int -> Format_doc.formatter -> int -> string -> unit
  val pp_print_char : char Format_doc.printer
  val pp_print_int : int Format_doc.printer
  val pp_print_float : float Format_doc.printer
  val pp_print_bool : bool Format_doc.printer
  val pp_print_nothing : unit Format_doc.printer
  val pp_print_iter :
    ?pp_sep:unit Format_doc.printer ->
    (('-> unit) -> '-> unit) ->
    'Format_doc.printer -> 'Format_doc.printer
  val pp_print_list :
    ?pp_sep:unit Format_doc.printer ->
    'Format_doc.printer -> 'a list Format_doc.printer
  val pp_print_array :
    ?pp_sep:unit Format_doc.printer ->
    'Format_doc.printer -> 'a array Format_doc.printer
  val pp_print_seq :
    ?pp_sep:unit Format_doc.printer ->
    'Format_doc.printer -> 'Stdlib.Seq.t Format_doc.printer
  val pp_print_option :
    ?none:unit Format_doc.printer ->
    'Format_doc.printer -> 'a option Format_doc.printer
  val pp_print_result :
    ok:'Format_doc.printer ->
    error:'Format_doc.printer -> ('a, 'e) Stdlib.result Format_doc.printer
  val pp_print_either :
    left:'Format_doc.printer ->
    right:'Format_doc.printer ->
    ('a, 'b) Stdlib.Either.t Format_doc.printer
  val pp_open_stag : Stdlib.Format.stag Format_doc.printer
  val pp_close_stag : unit Format_doc.printer
  val pp_open_box : int Format_doc.printer
  val pp_close_box : unit Format_doc.printer
  val pp_print_space : unit Format_doc.printer
  val pp_print_cut : unit Format_doc.printer
  val pp_print_break : Format_doc.formatter -> int -> int -> unit
  val pp_print_custom_break :
    Format_doc.formatter ->
    fits:string * int * string -> breaks:string * int * string -> unit
  val pp_open_tbox : unit Format_doc.printer
  val pp_close_tbox : unit Format_doc.printer
  val pp_set_tab : unit Format_doc.printer
  val pp_print_tab : unit Format_doc.printer
  val pp_print_tbreak : Format_doc.formatter -> int -> int -> unit
  val pp_print_if_newline : unit Format_doc.printer
  val pp_force_newline : unit Format_doc.printer
  val pp_print_flush : unit Format_doc.printer
  val pp_print_newline : unit Format_doc.printer
  val comma : unit Format_doc.printer
  val pp_two_columns :
    ?sep:string ->
    ?max_lines:int -> Format_doc.formatter -> (string * string) list -> unit
end