sig
  type 'a sequence = ('-> unit) -> unit
  type 'a or_error = ('a, string) CCResult.t
  module Time :
    sig
      val total : unit -> float
      val start : unit -> float
      type timer
      val start_timer : unit -> Utils.Time.timer
      val stop_timer : Utils.Time.timer -> unit
      val get_timer : Utils.Time.timer -> float
    end
  module Section :
    sig
      type t
      val full_name : Utils.Section.t -> string
      val set_debug : Utils.Section.t -> int -> unit
      val clear_debug : Utils.Section.t -> unit
      val get_debug : Utils.Section.t -> int option
      val cur_level : Utils.Section.t -> int
      val iter : (string * Utils.Section.t) Utils.sequence
      val root : Utils.Section.t
      val make :
        ?parent:Utils.Section.t ->
        ?inheriting:Utils.Section.t list -> string -> Utils.Section.t
    end
  val set_debug : int -> unit
  val get_debug : unit -> int
  val debugf :
    ?lock:bool ->
    ?section:Utils.Section.t ->
    int ->
    ('a, Format.formatter, unit, unit) Pervasives.format4 ->
    ('-> unit) -> unit
  val debug : ?lock:bool -> ?section:Utils.Section.t -> int -> string -> unit
  module Callback :
    sig
      type 'a t
      type callback_id = private int
      val create : unit -> 'Utils.Callback.t
      val register :
        'Utils.Callback.t -> f:'-> Utils.Callback.callback_id
      val remove : 'Utils.Callback.t -> id:int -> unit
      val iter : 'Utils.Callback.t -> f:('-> unit) -> unit
      val call1 : ('-> unit) Utils.Callback.t -> '-> unit
      val call2 : ('-> '-> unit) Utils.Callback.t -> '-> '-> unit
    end
  val vec_fold_map :
    ('-> '-> 'b * 'c) ->
    '-> ('a, 'd) CCVector.t -> 'b * ('c, [ `RW ]) CCVector.t
  val fold_map : ('-> '-> 'b * 'c) -> '-> 'a list -> 'b * 'c list
  val fold_mapi :
    f:(int -> '-> '-> 'b * 'c) -> x:'-> 'a list -> 'b * 'c list
  val filteri : (int -> '-> bool) -> 'a list -> 'a list
  val singleton_if : bool -> f:('-> 'b) -> '-> 'b list
  val arg_choice : (string * 'a) list -> ('-> unit) -> Arg.spec
  type warning = Warn_overlapping_match | Warn_model_parsing_error
  val toggle_warning : Utils.warning -> bool -> unit
  val is_warning_enabled : Utils.warning -> bool
  val warning : Utils.warning -> string -> unit
  val warningf :
    Utils.warning ->
    ('a, Format.formatter, unit, unit) Pervasives.format4 -> 'a
  val options_warnings_ : (Arg.key * Arg.spec * Arg.doc) list
  val options_others_ : (Arg.key * Arg.spec * Arg.doc) list Pervasives.ref
  val add_option : Arg.key * Arg.spec * Arg.doc -> unit
  exception NotImplemented of string
  val pp_seq :
    ?sep:string -> 'CCFormat.printer -> 'Sequence.t CCFormat.printer
  val pp_list :
    ?sep:string -> 'CCFormat.printer -> 'a list CCFormat.printer
  val pp_error_prefix : unit CCFormat.printer
  val err_sprintf :
    ('a, Format.formatter, unit, string) Pervasives.format4 -> 'a
  val not_implemented : string -> 'a
  val not_implementedf :
    ('a, Format.formatter, unit, 'b) Pervasives.format4 -> 'a
  val failwithf : ('a, Format.formatter, unit, 'b) Pervasives.format4 -> 'a
  val err_of_exn : exn -> 'Utils.or_error
  val exn_ksprintf :
    f:(string -> exn) ->
    ('a, Format.formatter, unit, 'b) Pervasives.format4 -> 'a
  val ignore_catch : ('-> 'b) -> '-> unit
end