A time source has a phantom read-write parameter, where write gives permission to call advance and fire_past_alarms.
write
advance
fire_past_alarms
type -'rw t
include sig ... end
val sexp_of_t : ('rw ‑> Base.Sexp.t) ‑> 'rw t ‑> Base.Sexp.t