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