sig
  val do_next_step : unit -> unit
  val at_first_measurement : unit -> unit
  val at_last_measurement : unit -> unit
  val do_measurement : time:int -> (int -> unit) * (int -> unit)
end