12345678910111213141516171819202122232425262728293031type'astate=|Unset|Setof'atype'at={mutablestate:'astate;to_dyn:'a->Dyn.t}letcreateto_dyn={state=Unset;to_dyn}letsettnew_=matcht.statewith|Unset->t.state<-Setnew_|Setold->Code_error.raise"Fdecl.set: already set"["old",t.to_dynold;"new_",t.to_dynnew_];;letgett=matcht.statewith|Unset->Code_error.raise"Fdecl.get: not set"[]|Setx->x;;letto_dynt=matcht.statewith|Unset->Dyn.variant"Unset"[]|Seta->Dyn.variant"Set"[t.to_dyna];;