sig
  type 'a t
  type 'a timing_wheel = 'Timing_wheel_intf.S.t
  module Alarm :
    sig
      type 'a t
      val at :
        'Timing_wheel_intf.S.timing_wheel ->
        'Timing_wheel_intf.S.Alarm.t -> Timing_wheel_intf.Time.t
      val key :
        'Timing_wheel_intf.S.timing_wheel ->
        'Timing_wheel_intf.S.Alarm.t -> int
      val value :
        'Timing_wheel_intf.S.timing_wheel ->
        'Timing_wheel_intf.S.Alarm.t -> 'a
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        'Timing_wheel_intf.S.Alarm.t -> Sexplib.Sexp.t
    end
  val invariant :
    'Core_kernel.Invariant_intf.inv -> 'a t Core_kernel.Invariant_intf.inv
  module Level_bits :
    sig
      type t
      val invariant : t Core_kernel.Invariant_intf.inv
      val max_num_bits : int
      val create_exn : int list -> Timing_wheel_intf.S.Level_bits.t
      val default : Word_size.t -> Timing_wheel_intf.S.Level_bits.t
      val num_bits : Timing_wheel_intf.S.Level_bits.t -> int
      val durations :
        Timing_wheel_intf.S.Level_bits.t ->
        alarm_precision:Timing_wheel_intf.Time.Span.t ->
        Timing_wheel_intf.Time.Span.t list
      val t_of_sexp : Sexplib.Sexp.t -> Timing_wheel_intf.S.Level_bits.t
      val sexp_of_t : Timing_wheel_intf.S.Level_bits.t -> Sexplib.Sexp.t
    end
  val create :
    ?level_bits:Timing_wheel_intf.S.Level_bits.t ->
    start:Timing_wheel_intf.Time.t ->
    alarm_precision:Timing_wheel_intf.Time.Span.t ->
    dummy:'-> unit -> 'Timing_wheel_intf.S.t
  val alarm_precision :
    'Timing_wheel_intf.S.t -> Timing_wheel_intf.Time.Span.t
  val now : 'Timing_wheel_intf.S.t -> Timing_wheel_intf.Time.t
  val start : 'Timing_wheel_intf.S.t -> Timing_wheel_intf.Time.t
  val is_empty : 'Timing_wheel_intf.S.t -> bool
  val length : 'Timing_wheel_intf.S.t -> int
  val iter :
    'Timing_wheel_intf.S.t ->
    f:('Timing_wheel_intf.S.Alarm.t -> unit) -> unit
  val interval_start :
    'Timing_wheel_intf.S.t ->
    Timing_wheel_intf.Time.t -> Timing_wheel_intf.Time.t
  val advance_clock :
    'Timing_wheel_intf.S.t ->
    to_:Timing_wheel_intf.Time.t ->
    handle_fired:('Timing_wheel_intf.S.Alarm.t -> unit) -> unit
  val alarm_upper_bound :
    'Timing_wheel_intf.S.t -> Timing_wheel_intf.Time.t
  val add :
    'Timing_wheel_intf.S.t ->
    at:Timing_wheel_intf.Time.t -> '-> 'Timing_wheel_intf.S.Alarm.t
  val remove :
    'Timing_wheel_intf.S.t -> 'Timing_wheel_intf.S.Alarm.t -> unit
  val next_alarm_fires_at :
    'Timing_wheel_intf.S.t -> Timing_wheel_intf.Time.t option
  module Priority_queue :
    sig
      type 'a t
      type 'a priority_queue = 'Timing_wheel_intf.S.Priority_queue.t
      module Elt :
        sig
          type 'a t
          val invariant :
            'Timing_wheel_intf.S.Priority_queue.priority_queue ->
            'Invariant.t ->
            'Timing_wheel_intf.S.Priority_queue.Elt.t Invariant.t
          val key :
            'Timing_wheel_intf.S.Priority_queue.priority_queue ->
            'Timing_wheel_intf.S.Priority_queue.Elt.t -> int
          val value :
            'Timing_wheel_intf.S.Priority_queue.priority_queue ->
            'Timing_wheel_intf.S.Priority_queue.Elt.t -> 'a
          val sexp_of_t :
            ('-> Sexplib.Sexp.t) ->
            'Timing_wheel_intf.S.Priority_queue.Elt.t -> Sexplib.Sexp.t
        end
      val invariant :
        'Core_kernel.Invariant_intf.inv ->
        'a t Core_kernel.Invariant_intf.inv
      val create :
        ?level_bits:Timing_wheel_intf.S.Level_bits.t ->
        dummy:'-> unit -> 'Timing_wheel_intf.S.Priority_queue.t
      val length : 'Timing_wheel_intf.S.Priority_queue.t -> int
      val is_empty : 'Timing_wheel_intf.S.Priority_queue.t -> bool
      val max_representable_key : int
      val min_allowed_key : 'Timing_wheel_intf.S.Priority_queue.t -> int
      val max_allowed_key : 'Timing_wheel_intf.S.Priority_queue.t -> int
      val min_elt :
        'Timing_wheel_intf.S.Priority_queue.t ->
        'Timing_wheel_intf.S.Priority_queue.Elt.t option
      val min_key : 'Timing_wheel_intf.S.Priority_queue.t -> int option
      val add :
        'Timing_wheel_intf.S.Priority_queue.t ->
        key:int -> '-> 'Timing_wheel_intf.S.Priority_queue.Elt.t
      val remove :
        'Timing_wheel_intf.S.Priority_queue.t ->
        'Timing_wheel_intf.S.Priority_queue.Elt.t -> unit
      val increase_min_allowed_key :
        'Timing_wheel_intf.S.Priority_queue.t ->
        key:int ->
        handle_removed:('Timing_wheel_intf.S.Priority_queue.Elt.t -> unit) ->
        unit
      val iter :
        'Timing_wheel_intf.S.Priority_queue.t ->
        f:('Timing_wheel_intf.S.Priority_queue.Elt.t -> unit) -> unit
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        'Timing_wheel_intf.S.Priority_queue.t -> Sexplib.Sexp.t
    end
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) -> 'Timing_wheel_intf.S.t -> Sexplib.Sexp.t
end