1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071(*
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()=1