123456789101112131415161718192021222324252627openCore_kernelopen!ImportopenTypes.KindmoduleNode=Types.Nodetype'at='aTypes.Freeze.t={main:'aNode.t;child:'aNode.t;only_freeze_when:'a->bool}[@@derivingfields,sexp_of]letinvariant_invariant_at=Invariant.invariant[%here]t[%sexp_of:_t](fun()->letcheckf=Invariant.check_fieldtfinFields.iter~main:(check(fun(main:_Node.t)->assert(Scope.is_topmain.created_in);matchmain.kindwith|Invalid->()(* happens when freezing an invalid value *)|Const_->()(* happens on becoming frozen *)|Freezet'->assert(phys_equaltt')|_->assertfalse))~child:ignore~only_freeze_when:ignore);;