sig
  val uuid : unit -> string
  val list_unique : 'a list -> 'a list
  val memo : ('-> 'b) -> '-> 'b
  val timestamp : unit -> string
  type label = string
  module type Messages =
    sig
      type t
      val create : ?enabled:bool -> Util.label -> Util.Messages.t
      val eprintf :
        Util.Messages.t -> ('a, unit, string, unit) Pervasives.format4 -> 'a
      val enable : Util.label -> unit
      val disable : Util.label -> unit
      val all_disabled : unit -> unit
      val all_enabled : unit -> unit
      val avalaible : unit -> Util.label list
      val is_enabled : Util.label -> bool
    end
  module Debug : Messages
  module Warning : Messages
  module Info : Messages
  module Logging :
    functor (X : sig val label : string end->
      sig
        val it : Info.t
        val info : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val wt : Warning.t
        val warning : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val dt : Debug.t
        val debug : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val fatal : ('a, unit, string, 'b) Pervasives.format4 -> 'a
      end
  module Progress :
    sig
      type t
      val create :
        ?enabled:bool ->
        ?total:int -> ?unbounded:bool -> Util.label -> Util.Progress.t
      val enable : Util.label -> unit
      val disable : Util.label -> unit
      val set_total : Util.Progress.t -> int -> unit
      val progress : ?i:int -> Util.Progress.t -> unit
      val reset : Util.Progress.t -> unit
      val available : unit -> Util.label list
    end
  module Timer :
    sig
      type t
      val create : ?enabled:bool -> string -> Util.Timer.t
      val enable : Util.label -> unit
      val pp_timer : Format.formatter -> Util.Timer.t -> unit
      val dump : Format.formatter -> unit -> unit
      val start : Util.Timer.t -> unit
      val stop : Util.Timer.t -> '-> 'a
      val available : unit -> Util.label list
    end
  module IntHashtbl :
    sig
      type key = int
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
    end
  module StringHashtbl :
    sig
      type key = string
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
    end
end