sig
  val run_at : Core.Std.Time.t -> ('-> unit) -> '-> unit
  val run_after : Core.Std.Time.Span.t -> ('-> unit) -> '-> unit
  val at : Core.Std.Time.t -> unit Deferred.t
  val after : Core.Std.Time.Span.t -> unit Deferred.t
  val with_timeout :
    Core.Std.Time.Span.t ->
    'Deferred.t -> [ `Result of '| `Timeout ] Deferred.t
  module Event :
    sig
      type t
      val invariant : t Core_kernel.Invariant_intf.inv
      val status : Clock.Event.t -> [ `Aborted | `Happened | `Waiting ]
      val abort :
        Clock.Event.t -> [ `Ok | `Previously_aborted | `Previously_happened ]
      val at :
        Core.Std.Time.t ->
        Clock.Event.t * [ `Aborted | `Happened ] Deferred.t
      val after :
        Core.Std.Time.Span.t ->
        Clock.Event.t * [ `Aborted | `Happened ] Deferred.t
      val sexp_of_t : Clock.Event.t -> Sexplib.Sexp.t
    end
  val at_varying_intervals :
    ?stop:unit Deferred.t ->
    (unit -> Core.Std.Time.Span.t) -> unit Async_stream.t
  val at_intervals :
    ?start:Core.Std.Time.t ->
    ?stop:unit Deferred.t -> Core.Std.Time.Span.t -> unit Async_stream.t
  val every' :
    ?start:unit Deferred.t ->
    ?stop:unit Deferred.t ->
    ?continue_on_error:bool ->
    Core.Std.Time.Span.t -> (unit -> unit Deferred.t) -> unit
  val every :
    ?start:unit Deferred.t ->
    ?stop:unit Deferred.t ->
    ?continue_on_error:bool -> Core.Std.Time.Span.t -> (unit -> unit) -> unit
end