123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354openLangopenDomainopenLib(* Hint kinds *)moduleKind=structtypet=AlterofHints.Alter.t|FieldsofHints.Fields.tletto_string=function|Alterhint_alter->Hints.Alter.to_stringhint_alter|Fieldshint_fields->Hints.Fields.to_stringhint_fieldsend(* Hints associated with type cases *)moduleTypHints=MakeCaseIdEnv(Kind)(* Hints associated with relation ids *)moduleRelHints=MakeRIdEnv(Kind)(* Hints associated with function ids *)moduleFuncHints=MakeFIdEnv(Kind)(* Collection of hints for a single hint id *)typet={typs:TypHints.t;funcs:FuncHints.t;rels:RelHints.t}letempty={typs=TypHints.empty;funcs=FuncHints.empty;rels=RelHints.empty}(* Adders *)letadd_typ(cid:CaseId.t)(kind:Kind.t)(kinds:t):t={kindswithtyps=TypHints.addcidkindkinds.typs}letadd_func(fid:FId.t)(kind:Kind.t)(kinds:t):t={kindswithfuncs=FuncHints.addfidkindkinds.funcs}letadd_rel(rid:RId.t)(kind:Kind.t)(kinds:t):t={kindswithrels=RelHints.addridkindkinds.rels}(* Finders *)letfind_typ(cid:CaseId.t)(kinds:t):Kind.toption=TypHints.find_optcidkinds.typsletfind_func(fid:FId.t)(kinds:t):Kind.toption=FuncHints.find_optfidkinds.funcsletfind_rel(rid:RId.t)(kinds:t):Kind.toption=RelHints.find_optridkinds.rels