sig
  module Event :
    sig
      type 'a t
      val at : 'Events.Event.t -> Core.Std.Time.t
      val value : 'Events.Event.t -> 'a
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) -> 'Events.Event.t -> Sexplib.Sexp.t
    end
  type 'a t
  val invariant : 'Events.t -> unit
  val create : now:Core.Std.Time.t -> 'Events.t
  val iter : 'Events.t -> f:('Events.Event.t -> unit) -> unit
  val is_empty : 'Events.t -> bool
  val now : 'Events.t -> Core.Std.Time.t
  val advance_clock :
    'Events.t ->
    to_:Core.Std.Time.t -> [ `Not_in_the_future | `Ok of 'a list ]
  val add :
    'Events.t ->
    at:Core.Std.Time.t ->
    '-> [ `Not_in_the_future | `Ok of 'Events.Event.t ]
  val remove :
    'Events.t -> 'Events.Event.t -> [ `Not_present | `Removed ]
  val next_upcoming : 'Events.t -> 'Events.Event.t option
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'Events.t -> Sexplib.Sexp.t
  val ounit_tests : unit -> OUnit.test
end