1234567891011121314151617181920212223242526272829303132333435openCoreopen!ImportmoduleAction=structtypet=Types.Alarm_value.Action.t=|AtofAt.t|At_intervalsofAt_intervals.t|Snapshot:_Snapshot.t->t|Step_function:_Step_function_node.t->t[@@derivingsexp_of]letinvariant=function|Atat->At.invariantat|At_intervalsat_intervals->At_intervals.invariantat_intervals|Snapshotsnapshot->Snapshot.invariantignoresnapshot|Step_functionstep_function_node->Step_function_node.invariantignorestep_function_node;;endtypet=Types.Alarm_value.t={action:Action.t;(* [next_fired] singly links all alarm values that fire during a single call to
[advance_clock]. *)mutablenext_fired:(tUopt.t[@sexp.opaque])}[@@derivingfields,sexp_of]letinvariantt=Invariant.invariant[%here]t[%sexp_of:t](fun()->letcheckf=Invariant.check_fieldtfinFields.iter~action:(checkAction.invariant)~next_fired:ignore);;letcreateaction={action;next_fired=Uopt.none}