sig
  type t = SmartPrint.t
  type ('a, 'b) result
  val empty : Docout.LOGGER.t
  val string : string -> Docout.LOGGER.t
  val sub_string : string -> int -> int -> Docout.LOGGER.t
  val ( !^ ) : string -> Docout.LOGGER.t
  val space : Docout.LOGGER.t
  val newline : Docout.LOGGER.t
  val append : Docout.LOGGER.t -> Docout.LOGGER.t -> Docout.LOGGER.t
  val ( ^-^ ) : Docout.LOGGER.t -> Docout.LOGGER.t -> Docout.LOGGER.t
  val concat_with_space :
    Docout.LOGGER.t -> Docout.LOGGER.t -> Docout.LOGGER.t
  val ( ^^ ) : Docout.LOGGER.t -> Docout.LOGGER.t -> Docout.LOGGER.t
  val words : string -> Docout.LOGGER.t
  val lines : string -> Docout.LOGGER.t
  val indent : Docout.LOGGER.t -> Docout.LOGGER.t
  val nest : Docout.LOGGER.t -> Docout.LOGGER.t
  val nest_all : Docout.LOGGER.t -> Docout.LOGGER.t
  val group : Docout.LOGGER.t -> Docout.LOGGER.t
  val group_all : Docout.LOGGER.t -> Docout.LOGGER.t
  val parens : Docout.LOGGER.t -> Docout.LOGGER.t
  val braces : Docout.LOGGER.t -> Docout.LOGGER.t
  val brakets : Docout.LOGGER.t -> Docout.LOGGER.t
  val angle_brakets : Docout.LOGGER.t -> Docout.LOGGER.t
  val single_quotes : Docout.LOGGER.t -> Docout.LOGGER.t
  val double_quotes : Docout.LOGGER.t -> Docout.LOGGER.t
  val concat : Docout.LOGGER.t list -> Docout.LOGGER.t
  val separate : Docout.LOGGER.t -> Docout.LOGGER.t list -> Docout.LOGGER.t
  module OCaml :
    sig
      val unit : unit -> Docout.LOGGER.t
      val bool : bool -> Docout.LOGGER.t
      val int : int -> Docout.LOGGER.t
      val float : float -> Docout.LOGGER.t
      val string : string -> Docout.LOGGER.t
      val option : ('-> Docout.LOGGER.t) -> 'a option -> Docout.LOGGER.t
      val list : ('-> Docout.LOGGER.t) -> 'a list -> Docout.LOGGER.t
      val tuple : Docout.LOGGER.t list -> Docout.LOGGER.t
    end
  val to_something :
    int ->
    int ->
    (char -> unit) ->
    (string -> unit) ->
    (string -> int -> int -> unit) -> Docout.LOGGER.t -> unit
  val to_buffer : int -> int -> Buffer.t -> Docout.LOGGER.t -> unit
  val to_out_channel :
    int -> int -> Pervasives.out_channel -> Docout.LOGGER.t -> unit
  val to_stdout : int -> int -> Docout.LOGGER.t -> unit
  val ( % ) : Docout.LOGGER.t -> Docout.LOGGER.t -> Docout.LOGGER.t
  val s : string -> Docout.LOGGER.t
  val sp : Docout.LOGGER.t
  val sf : ('a, unit, string, Docout.LOGGER.t) Pervasives.format4 -> 'a
  val i : int -> Docout.LOGGER.t
  val f : float -> Docout.LOGGER.t
  val n : Docout.LOGGER.t
  val verbatim : string -> Docout.LOGGER.t
  val exn : exn -> Docout.LOGGER.t
  val option : f:('-> Docout.LOGGER.t) -> 'a option -> Docout.LOGGER.t
  val escape : string -> Docout.LOGGER.t
  val color : string -> Docout.LOGGER.t -> Docout.LOGGER.t
  val bold_red : Docout.LOGGER.t -> Docout.LOGGER.t
  val bold_yellow : Docout.LOGGER.t -> Docout.LOGGER.t
  val bold_green : Docout.LOGGER.t -> Docout.LOGGER.t
  val greyish : Docout.LOGGER.t -> Docout.LOGGER.t
  val to_string : line_width:int -> indent:int -> SmartPrint.t -> string
  val to_list :
    line_width:int ->
    indent:int ->
    SmartPrint.t ->
    [> `Char of char | `String of string | `Sub_string of string * int * int ]
    list
  val print :
    [< `Debug of int | `Error | `Normal | `Warning ] ->
    Docout.LOGGER.t -> (unit, 'a) Docout.LOGGER.result
  val ( @ ) :
    Docout.LOGGER.t ->
    [< `Debug of int | `Error | `Normal | `Warning ] ->
    (unit, 'a) Docout.LOGGER.result
  val normal : [> `Normal ]
  val error : [> `Error ]
  val warning : [> `Warning ]
  val verbose : [> `Debug of int ]
  val very_verbose : [> `Debug of int ]
end