123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475(*
include Domain
*)(*
type !'a t = 'a
*)type'at='atypeid=intmoduleDLS=structtype'akey={split_from_parent:('a->'a)option;f:unit->'a;mutablevalue:'aoption;}letnew_key?split_from_parentf={split_from_parent;f;value=None}letgetkey=matchkey.valuewith|Somevalue->value|None->letvalue=key.f()inkey.value<-Somevalue;valueletsetkeyvalue=key.value<-Somevalueendletbefore_first_spawn_list=ref(Some[])letspawnf=beginmatch!before_first_spawn_listwith|None->()|Somelist->List.iter(funf->f())(List.revlist);before_first_spawn_list:=Noneend;f()letjoinv=vletget_id_v=0letself()=0letbefore_first_spawnf=match!before_first_spawn_listwith|None->invalid_arg"Already spawned"|Somelist->before_first_spawn_list:=Some(f::list)letat_exitf=at_exitfletcpu_relax()=()letis_main_domain()=trueletrecommended_domain_count()=1letself_index()=failwith"not implemented"