12345678910111213141516171819202122232425262728openCore_kernelopen!ImportopenTypes.KindmoduleNode=Types.Nodetypet=Types.At.t={main:Before_or_after.tNode.t;at:Time_ns.t;mutablealarm:Alarm.t;clock:(Types.Clock.t[@sexp.opaque])}[@@derivingfields,sexp_of]letinvariantt=Invariant.invariant[%here]t[%sexp_of:t](fun()->letcheckf=Invariant.check_fieldtfinFields.iter~main:(check(fun(main:Before_or_after.tNode.t)->matchmain.kindwith|Invalid->()|ConstAfter->()(* happens once the current time passes [t.at]. *)|Att'->assert(phys_equaltt')|_->assertfalse))~at:ignore~alarm:(checkAlarm.invariant)~clock:ignore);;