sig
  type t
  type event
  type interval =
      INone
    | INormal of Time.Span.t
    | IRandom of Time.Span.t * float
  val create : ?min_size:int -> ?tick_unit:Time.Span.t -> unit -> Timer.t
  val deactivate : Timer.t -> unit
  val add :
    Timer.t ->
    (Timer.event -> Time.t -> unit) ->
    ?randomize:float -> ?interval:Time.Span.t -> Time.Span.t -> Timer.event
  val add_abs :
    Timer.t ->
    (Timer.event -> Time.t -> unit) ->
    ?randomize:float -> ?interval:Time.Span.t -> Time.t -> Timer.event
  val remove : Timer.event -> unit
  val reschedule :
    Timer.event ->
    ?randomize:float -> ?interval:Time.Span.t -> Time.Span.t -> unit
  val get_timer : Timer.event -> Timer.t
  val get_event_time : Timer.event -> Time.t
  val get_event_interval : Timer.event -> Timer.interval
  val is_activated : Timer.t -> bool
end