1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120(*
* Copyright (c) 2014 Leo White <lpw25@cl.cam.ac.uk>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)openNamesmoduleIdentifier=structtypet=Paths_types.Identifier.anyletrecname_aux:t->string=function|`Root(_,name)->ModuleName.to_stringname|`Page(_,name)->PageName.to_stringname|`LeafPage(_,name)->PageName.to_stringname|`Module(_,name)->ModuleName.to_stringname|`Parameter(_,name)->ParameterName.to_stringname|`Resultx->name_aux(x:>t)|`ModuleType(_,name)->ModuleTypeName.to_stringname|`Type(_,name)->TypeName.to_stringname|`CoreTypename->TypeName.to_stringname|`Constructor(_,name)->ConstructorName.to_stringname|`Field(_,name)->FieldName.to_stringname|`Extension(_,name)->ExtensionName.to_stringname|`Exception(_,name)->ExceptionName.to_stringname|`CoreExceptionname->ExceptionName.to_stringname|`Value(_,name)->ValueName.to_stringname|`Class(_,name)->ClassName.to_stringname|`ClassType(_,name)->ClassTypeName.to_stringname|`Method(_,name)->MethodName.to_stringname|`InstanceVariable(_,name)->InstanceVariableName.to_stringname|`Label(_,name)->LabelName.to_stringnameletname:[<t]->string=funn->name_aux(n:>t)letreclabel_parent_aux=letopenPaths_types.Identifierinfun(n:any)->matchnwith|`Resulti->label_parent_aux(i:>any)|`CoreType_|`CoreException_->assertfalse|`Root_asp->(p:>label_parent)|`Page_asp->(p:>label_parent)|`LeafPage_asp->(p:>label_parent)|`Module(p,_)|`ModuleType(p,_)|`Parameter(p,_)|`Class(p,_)|`ClassType(p,_)|`Type(p,_)|`Extension(p,_)|`Exception(p,_)|`Value(p,_)->(p:signature:>label_parent)|`Label(p,_)->p|`Method(p,_)|`InstanceVariable(p,_)->(p:class_signature:>label_parent)|`Constructor(p,_)->(p:datatype:>label_parent)|`Field(p,_)->(p:parent:>label_parent)letlabel_parentn=label_parent_aux(n:>t)letequal=(=)lethash=Hashtbl.hashletcompare=comparetypeany=tmoduleAny=structtypet=anyletequal=equallethash=hashletcompare=compareendmoduleSignature=structtypet=Paths_types.Identifier.signatureletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleClassSignature=structtypet=Paths_types.Identifier.class_signatureletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleDataType=structtypet=Paths_types.Identifier.datatypeletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleParent=structtypet=Paths_types.Identifier.parentletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleLabelParent=structtypet=Paths_types.Identifier.label_parentletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleRootModule=structtypet=Paths_types.Identifier.root_moduleletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleModule=structtypet=Paths_types.Identifier.module_letequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleFunctorParameter=structtypet=Paths_types.Identifier.functor_parameterletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleFunctorResult=structtypet=Paths_types.Identifier.functor_resultletequalxy=equal(x:>any)(y:>any)lethashx=hash(x:>any)letcomparexy=compare(x:>any)(y:>any)endmoduleModuleType=structtypet=Paths_types.Identifier.module_typeletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleType=structtypet=Paths_types.Identifier.type_letequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleConstructor=structtypet=Paths_types.Identifier.constructorletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleField=structtypet=Paths_types.Identifier.fieldletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleExtension=structtypet=Paths_types.Identifier.extensionletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleException=structtypet=Paths_types.Identifier.exception_letequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleValue=structtypet=Paths_types.Identifier.valueletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleClass=structtypet=Paths_types.Identifier.class_letequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleClassType=structtypet=Paths_types.Identifier.class_typeletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleMethod=structtypet=Paths_types.Identifier.method_letequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleInstanceVariable=structtypet=Paths_types.Identifier.instance_variableletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleLabel=structtypet=Paths_types.Identifier.labelletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmodulePage=structtypet=Paths_types.Identifier.pageletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleContainerPage=structtypet=Paths_types.Identifier.container_pageletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleOdocId=structtypet=Paths_types.Identifier.odoc_idletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmodulePath=structmoduleModule=structtypet=Paths_types.Identifier.path_moduleletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleModuleType=structtypet=Paths_types.Identifier.path_module_typeletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleType=structtypet=Paths_types.Identifier.path_typeletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endmoduleClassType=structtypet=Paths_types.Identifier.path_class_typeletequalxy=equal(x:>any)(y:>any)lethash=Hashtbl.hashletcomparexy=compare(x:>any)(y:>any)endtypet=Paths_types.Identifier.path_anyendmoduleSets=structmoduleSignature=Set.Make(Signature)moduleClassSignature=Set.Make(ClassSignature)moduleDataType=Set.Make(DataType)moduleParent=Set.Make(Parent)moduleLabelParent=Set.Make(LabelParent)moduleRootModule=Set.Make(RootModule)moduleFunctorParameter=Set.Make(FunctorParameter)moduleModule=Set.Make(Module)moduleModuleType=Set.Make(ModuleType)moduleType=Set.Make(Type)moduleConstructor=Set.Make(Constructor)moduleField=Set.Make(Field)moduleExtension=Set.Make(Extension)moduleException=Set.Make(Exception)moduleValue=Set.Make(Value)moduleClass=Set.Make(Class)moduleClassType=Set.Make(ClassType)moduleMethod=Set.Make(Method)moduleInstanceVariable=Set.Make(InstanceVariable)moduleLabel=Set.Make(Label)modulePage=Set.Make(Page)moduleContainerPage=Set.Make(ContainerPage)modulePath=structmoduleModule=Set.Make(Path.Module)moduleModuleType=Set.Make(Path.ModuleType)moduleType=Set.Make(Path.Type)moduleClassType=Set.Make(Path.ClassType)endendmoduleMaps=structmoduleAny=Map.Make(Any)moduleSignature=Map.Make(Signature)moduleClassSignature=Map.Make(ClassSignature)moduleDataType=Map.Make(DataType)moduleParent=Map.Make(Parent)moduleLabelParent=Map.Make(LabelParent)moduleRootModule=Map.Make(RootModule)moduleFunctorParameter=Map.Make(FunctorParameter)moduleModule=Map.Make(Module)moduleModuleType=Map.Make(ModuleType)moduleType=Map.Make(Type)moduleConstructor=Map.Make(Constructor)moduleField=Map.Make(Field)moduleExtension=Map.Make(Extension)moduleException=Map.Make(Exception)moduleValue=Map.Make(Value)moduleClass=Map.Make(Class)moduleClassType=Map.Make(ClassType)moduleMethod=Map.Make(Method)moduleInstanceVariable=Map.Make(InstanceVariable)moduleLabel=Map.Make(Label)modulePage=Map.Make(Page)moduleContainerPage=Map.Make(ContainerPage)modulePath=structmoduleModule=Map.Make(Path.Module)moduleModuleType=Map.Make(Path.ModuleType)moduleType=Map.Make(Path.Type)moduleClassType=Map.Make(Path.ClassType)endendendmodulePath=structtypet=Paths_types.Path.anyletrecis_resolved_hidden:Paths_types.Resolved_path.any->bool=funx->letopenPaths_types.Resolved_pathinletrecinner=function|`Identifier(`ModuleType(_,m))whenNames.ModuleTypeName.is_internalm->true|`Identifier(`Type(_,t))whenNames.TypeName.is_internalt->true|`Identifier(`Module(_,m))whenNames.ModuleName.is_internalm->true|`Identifier_->false|`Canonical(_,`Resolved_)->false|`Canonical(x,_)->inner(x:module_:>any)|`Hidden_->true|`Subst(p1,p2)->inner(p1:module_type:>any)||inner(p2:module_:>any)|`Module(p,_)->inner(p:module_:>any)|`Apply(p,_)->inner(p:module_:>any)|`ModuleType(_,m)whenNames.ModuleTypeName.is_internalm->true|`ModuleType(p,_)->inner(p:module_:>any)|`Type(_,t)whenNames.TypeName.is_internalt->true|`Type(p,_)->inner(p:module_:>any)|`Class(p,_)->inner(p:module_:>any)|`ClassType(p,_)->inner(p:module_:>any)|`Alias(p1,p2)->inner(p1:module_:>any)&&inner(p2:module_:>any)|`AliasModuleType(p1,p2)->inner(p1:module_type:>any)&&inner(p2:module_type:>any)|`SubstT(p1,p2)->inner(p1:>any)||inner(p2:>any)|`CanonicalModuleType(_,`Resolved_)->false|`CanonicalModuleType(x,_)->inner(x:module_type:>any)|`CanonicalType(_,`Resolved_)->false|`CanonicalType(x,_)->inner(x:type_:>any)|`OpaqueModulem->inner(m:>any)|`OpaqueModuleTypemt->inner(mt:>any)ininnerxandis_path_hidden:Paths_types.Path.any->bool=letopenPaths_types.Pathinfunction|`Resolvedr->is_resolved_hiddenr|`Identifier(_,hidden)->hidden|`Root_->false|`Forward_->false|`Dot(p,_)->is_path_hidden(p:module_:>any)|`Apply(p1,p2)->is_path_hidden(p1:module_:>any)||is_path_hidden(p2:module_:>any)moduleResolved=structtypet=Paths_types.Resolved_path.anyletrecparent_module_type_identifier:Paths_types.Resolved_path.module_type->Identifier.Signature.t=function|`Identifierid->(id:Identifier.ModuleType.t:>Identifier.Signature.t)|`ModuleType(m,n)->`ModuleType(parent_module_identifierm,n)|`SubstT(m,_n)->parent_module_type_identifierm|`CanonicalModuleType(_,`Resolvedp)->parent_module_type_identifierp|`CanonicalModuleType(p,_)->parent_module_type_identifierp|`OpaqueModuleTypemt->parent_module_type_identifiermt|`AliasModuleType(sub,orig)->ifis_path_hidden(`Resolved(sub:>t))thenparent_module_type_identifierorigelseparent_module_type_identifiersubandparent_module_identifier:Paths_types.Resolved_path.module_->Identifier.Signature.t=function|`Identifierid->(id:Identifier.Path.Module.t:>Identifier.Signature.t)|`Subst(sub,_)->parent_module_type_identifiersub|`Hiddenp->parent_module_identifierp|`Module(m,n)->`Module(parent_module_identifierm,n)|`Canonical(_,`Resolvedp)->parent_module_identifierp|`Canonical(p,_)->parent_module_identifierp|`Apply(m,_)->parent_module_identifierm|`Alias(sub,orig)->ifis_path_hidden(`Resolved(sub:>t))thenparent_module_identifierorigelseparent_module_identifiersub|`OpaqueModulem->parent_module_identifiermmoduleModule=structtypet=Paths_types.Resolved_path.module_letof_identid=`Identifieridletis_hiddenm=is_resolved_hidden(m:t:>Paths_types.Resolved_path.any)letrecidentifier:t->Identifier.Path.Module.t=function|`Identifierid->id|`Subst(_,p)->identifierp|`Hiddenp->identifierp|`Module(m,n)->`Module(parent_module_identifierm,n)|`Canonical(_,`Resolvedp)->identifierp|`Canonical(p,_)->identifierp|`Apply(m,_)->identifierm|`Alias(sub,orig)->ifis_path_hidden(`Resolved(sub:>Paths_types.Resolved_path.any))thenidentifierorigelseidentifiersub|`OpaqueModulem->identifiermletreccanonical_ident:t->Identifier.Path.Module.toption=function|`Identifier_id->None|`Subst(_,_)->None|`Hiddenp->canonical_identp|`Module(p,n)->(matchcanonical_identpwith|Somex->Some(`Module((x:>Identifier.Signature.t),n))|None->None)|`Canonical(_,`Resolvedp)->Some(identifierp)|`Canonical(_,_)->None|`Apply(_,_)->None|`Alias(_,_)->None|`OpaqueModulem->canonical_identmendmoduleModuleType=structtypet=Paths_types.Resolved_path.module_typeletof_identid=`Identifieridletis_hiddenm=is_resolved_hidden(m:t:>Paths_types.Resolved_path.any)letrecidentifier:t->Identifier.ModuleType.t=function|`Identifierid->id|`ModuleType(m,n)->`ModuleType(parent_module_identifierm,n)|`SubstT(s,_)->identifiers|`CanonicalModuleType(_,`Resolvedp)->identifierp|`CanonicalModuleType(p,_)->identifierp|`OpaqueModuleTypemt->identifiermt|`AliasModuleType(sub,orig)->ifis_path_hidden(`Resolved(sub:>Paths_types.Resolved_path.any))thenidentifierorigelseidentifiersubletreccanonical_ident:t->Identifier.ModuleType.toption=function|`Identifier_id->None|`ModuleType(p,n)->(matchModule.canonical_identpwith|Somex->Some(`ModuleType((x:>Identifier.Signature.t),n))|None->None)|`SubstT(_,_)->None|`AliasModuleType(_,_)->None|`CanonicalModuleType(_,`Resolvedp)->Some(identifierp)|`CanonicalModuleType(_,_)->None|`OpaqueModuleTypem->canonical_ident(m:>t)endmoduleType=structtypet=Paths_types.Resolved_path.type_letof_identid=`Identifieridletis_hiddenm=is_resolved_hidden(m:t:>Paths_types.Resolved_path.any)letrecidentifier:t->Identifier.Path.Type.t=function|`Identifierid->id|`CanonicalType(_,`Resolvedt)->identifiert|`CanonicalType(t,_)->identifiert|`Type(m,n)->`Type(parent_module_identifierm,n)|`Class(m,n)->`Class(parent_module_identifierm,n)|`ClassType(m,n)->`ClassType(parent_module_identifierm,n)letcanonical_ident:t->Identifier.Path.Type.toption=letparentmdefaultfn=matchModule.canonical_identmwith|Somex->fn(x:>Identifier.Signature.t)|None->defaultinfunction|`Identifier_->None|`CanonicalType(_,`Resolvedt)->Some(identifiert)|`CanonicalType(_,_)->None|`Type(m,n)->parentmNone(funsg->Some(`Type(sg,n)))|`Class(m,n)->parentmNone(funsg->Some(`Class(sg,n)))|`ClassType(m,n)->parentmNone(funsg->Some(`ClassType(sg,n)))endmoduleClassType=structtypet=Paths_types.Resolved_path.class_typeletof_identid=`Identifieridletis_hiddenm=is_resolved_hidden(m:t:>Paths_types.Resolved_path.any)letidentifier=function|`Identifierid->id|`Class(m,n)->`Class(parent_module_identifierm,n)|`ClassType(m,n)->`ClassType(parent_module_identifierm,n)endletrecidentifier:t->Identifier.t=function|`Identifierid->id|`Subst(_,p)->identifier(p:>t)|`Hiddenp->identifier(p:>t)|`Module(m,n)->`Module(parent_module_identifierm,n)|`Canonical(_,`Resolvedp)->identifier(p:>t)|`Canonical(p,_)->identifier(p:>t)|`Apply(m,_)->identifier(m:>t)|`Type(m,n)->`Type(parent_module_identifierm,n)|`ModuleType(m,n)->`ModuleType(parent_module_identifierm,n)|`Class(m,n)->`Class(parent_module_identifierm,n)|`ClassType(m,n)->`ClassType(parent_module_identifierm,n)|`Alias(sub,orig)->ifis_path_hidden(`Resolved(sub:>t))thenidentifier(orig:>t)elseidentifier(sub:>t)|`AliasModuleType(sub,orig)->ifis_path_hidden(`Resolved(sub:>t))thenidentifier(orig:>t)elseidentifier(sub:>t)|`SubstT(p,_)->identifier(p:>t)|`CanonicalModuleType(_,`Resolvedp)->identifier(p:>t)|`CanonicalModuleType(p,_)->identifier(p:>t)|`CanonicalType(_,`Resolvedp)->identifier(p:>t)|`CanonicalType(p,_)->identifier(p:>t)|`OpaqueModulem->identifier(m:>t)|`OpaqueModuleTypemt->identifier(mt:>t)endmoduleModule=structtypet=Paths_types.Path.module_endmoduleModuleType=structtypet=Paths_types.Path.module_typeendmoduleType=structtypet=Paths_types.Path.type_endmoduleClassType=structtypet=Paths_types.Path.class_typeendletis_hidden=is_path_hiddenendmoduleFragment=structmoduleResolved=structtypet=Paths_types.Resolved_fragment.anytyperoot=Paths_types.Resolved_fragment.rootletsig_of_modm=letopenPaths_types.Resolved_fragmentin(m:module_:>signature)typebase_name=|Baseofroot|BranchofModuleName.t*Paths_types.Resolved_fragment.signatureletrecsplit_parent:Paths_types.Resolved_fragment.signature->base_name=function|`Rooti->Basei|`Subst(_,p)->split_parent(sig_of_modp)|`Alias(_,p)->split_parent(sig_of_modp)|`OpaqueModulem->split_parent(sig_of_modm)|`Module(p,name)->(matchsplit_parentpwith|Basei->Branch(name,`Rooti)|Branch(base,m)->Branch(base,`Module(m,name)))moduleSignature=structtypet=Paths_types.Resolved_fragment.signatureletrecsplit:t->string*toption=function|`Root_->("",None)|`Subst(_,p)->split(sig_of_modp)|`Alias(_,p)->split(sig_of_modp)|`OpaqueModulem->split(sig_of_modm)|`Module(m,name)->(matchsplit_parentmwith|Base_->(ModuleName.to_stringname,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Module(m,name))))letrecidentifier:t->Identifier.Signature.t=function|`Root(`ModuleTypei)->(Path.Resolved.ModuleType.identifieri:>Identifier.Signature.t)|`Root(`Modulei)->(Path.Resolved.Module.identifieri:>Identifier.Signature.t)|`Subst(s,_)->(Path.Resolved.ModuleType.identifiers:>Identifier.Signature.t)|`Alias(i,_)->(Path.Resolved.Module.identifieri:>Identifier.Signature.t)|`Module(m,n)->`Module(identifierm,n)|`OpaqueModulem->identifier(sig_of_modm)endmoduleModule=structtypet=Paths_types.Resolved_fragment.module_letrecsplit:t->string*toption=function|`Subst(_,p)->splitp|`Alias(_,p)->splitp|`Module(m,name)->(matchsplit_parentmwith|Base_->(ModuleName.to_stringname,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Module(m,name))))|`OpaqueModulem->splitmendmoduleModuleType=structtypet=Paths_types.Resolved_fragment.module_typeletsplit:t->string*toption=function|`Module_type(m,name)->(matchsplit_parentmwith|Base_->(ModuleTypeName.to_stringname,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Module_type(m,name))))endmoduleType=structtypet=Paths_types.Resolved_fragment.type_letsplit:t->string*toption=function|`Type(m,name)->(matchsplit_parentmwith|Base_->(TypeName.to_stringname,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Type(m,name))))|`Class(m,name)->(matchsplit_parentmwith|Base_->(ClassName.to_stringname,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Class(m,name))))|`ClassType(m,name)->(matchsplit_parentmwith|Base_->(ClassTypeName.to_stringname,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`ClassType(m,name))))endtypeleaf=Paths_types.Resolved_fragment.leafletrecidentifier:t->Identifier.t=function|`Root(`ModuleType_r)->assertfalse|`Root(`Module_r)->assertfalse|`Subst(s,_)->Path.Resolved.identifier(s:>Path.Resolved.t)|`Alias(p,_)->(Path.Resolved.Module.identifierp:>Identifier.t)|`Module(m,n)->`Module(Signature.identifierm,n)|`Module_type(m,n)->`ModuleType(Signature.identifierm,n)|`Type(m,n)->`Type(Signature.identifierm,n)|`Class(m,n)->`Class(Signature.identifierm,n)|`ClassType(m,n)->`ClassType(Signature.identifierm,n)|`OpaqueModulem->identifier(m:>t)letrecis_hidden:t->bool=function|`Root(`ModuleTyper)->Path.is_resolved_hidden(r:>Path.Resolved.t)|`Root(`Moduler)->Path.is_resolved_hidden(r:>Path.Resolved.t)|`Subst(s,_)->Path.is_resolved_hidden(s:>Path.Resolved.t)|`Alias(s,_)->Path.is_resolved_hidden(s:>Path.Resolved.t)|`Module(m,_)|`Module_type(m,_)|`Type(m,_)|`Class(m,_)|`ClassType(m,_)->is_hidden(m:>t)|`OpaqueModulem->is_hidden(m:>t)endtypet=Paths_types.Fragment.anytypebase_name=|BaseofResolved.rootoption|BranchofModuleName.t*Paths_types.Fragment.signatureletrecsplit_parent:Paths_types.Fragment.signature->base_name=function|`Root->BaseNone|`Resolvedr->(matchResolved.split_parentrwith|Resolved.Basei->Base(Somei)|Resolved.Branch(base,m)->Branch(base,`Resolvedm))|`Dot(m,name)->(matchsplit_parentmwith|BaseNone->Branch(ModuleName.make_stdname,`Root)|Base(Somei)->Branch(ModuleName.make_stdname,`Resolved(`Rooti))|Branch(base,m)->Branch(base,`Dot(m,name)))moduleSignature=structtypet=Paths_types.Fragment.signatureletsplit:t->string*toption=function|`Root->("",None)|`Resolvedr->letbase,m=Resolved.Signature.splitrinletm=matchmwithNone->None|Somem->Some(`Resolvedm)in(base,m)|`Dot(m,name)->(matchsplit_parentmwith|Base_->(name,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Dot(m,name))))endmoduleModule=structtypet=Paths_types.Fragment.module_letsplit:t->string*toption=function|`Resolvedr->letbase,m=Resolved.Module.splitrinletm=matchmwithNone->None|Somem->Some(`Resolvedm)in(base,m)|`Dot(m,name)->(matchsplit_parentmwith|Base_->(name,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Dot(m,name))))endmoduleModuleType=structtypet=Paths_types.Fragment.module_typeletsplit:t->string*toption=function|`Resolvedr->letbase,m=Resolved.ModuleType.splitrinletm=matchmwithNone->None|Somem->Some(`Resolvedm)in(base,m)|`Dot(m,name)->(matchsplit_parentmwith|Base_->(name,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Dot(m,name))))endmoduleType=structtypet=Paths_types.Fragment.type_letsplit:t->string*toption=function|`Resolvedr->letbase,m=Resolved.Type.splitrinletm=matchmwithNone->None|Somem->Some(`Resolvedm)in(base,m)|`Dot(m,name)->(matchsplit_parentmwith|Base_->(name,None)|Branch(base,m)->(ModuleName.to_stringbase,Some(`Dot(m,name))))endtypeleaf=Paths_types.Fragment.leafendmoduleReference=structmoduleResolved=structopenPaths_types.Resolved_referencetypet=Paths_types.Resolved_reference.anyletrecparent_signature_identifier:signature->Identifier.Signature.t=function|`Identifierid->id|`Hiddens->parent_signature_identifier(s:>signature)|`Alias(sub,orig)->ifPath.Resolved.Module.is_hiddensubthenparent_signature_identifier(orig:>signature)else(Path.Resolved.Module.identifiersub:>Identifier.Signature.t)|`AliasModuleType(sub,orig)->ifPath.Resolved.ModuleType.is_hiddensubthenparent_signature_identifier(orig:>signature)else(Path.Resolved.ModuleType.identifiersub:>Identifier.Signature.t)|`Module(m,n)->`Module(parent_signature_identifierm,n)|`Canonical(_,`Resolvedr)->parent_signature_identifier(r:module_:>signature)|`Canonical(r,_)->parent_signature_identifier(r:module_:>signature)|`ModuleType(m,s)->`ModuleType(parent_signature_identifierm,s)andparent_type_identifier:datatype->Identifier.DataType.t=function|`Identifierid->id|`Type(sg,s)->`Type(parent_signature_identifiersg,s)andparent_class_signature_identifier:class_signature->Identifier.ClassSignature.t=function|`Identifierid->id|`Class(sg,s)->`Class(parent_signature_identifiersg,s)|`ClassType(sg,s)->`ClassType(parent_signature_identifiersg,s)andparent_identifier:parent->Identifier.Parent.t=function|`Identifierid->id|(`Hidden_|`Alias_|`AliasModuleType_|`Module_|`Canonical_|`ModuleType_)assg->(parent_signature_identifiersg:>Identifier.Parent.t)|`Type_ast->(parent_type_identifiert:>Identifier.Parent.t)|(`Class_|`ClassType_)asc->(parent_class_signature_identifierc:>Identifier.Parent.t)andlabel_parent_identifier:label_parent->Identifier.LabelParent.t=function|`Identifierid->id|(`Hidden_|`Alias_|`AliasModuleType_|`Module_|`Canonical_|`ModuleType_|`Type_|`Class_|`ClassType_)asr->(parent_identifierr:>Identifier.LabelParent.t)andidentifier:t->Identifier.t=function|`Identifierid->id|(`Alias_|`AliasModuleType_|`Module_|`Canonical_|`Hidden_|`Type_|`Class_|`ClassType_|`ModuleType_)asr->(label_parent_identifierr:>Identifier.t)|`Field(p,n)->`Field(parent_identifierp,n)|`Constructor(s,n)->`Constructor(parent_type_identifiers,n)|`Extension(p,q)->`Extension(parent_signature_identifierp,q)|`Exception(p,q)->`Exception(parent_signature_identifierp,q)|`Value(p,q)->`Value(parent_signature_identifierp,q)|`Method(p,q)->`Method(parent_class_signature_identifierp,q)|`InstanceVariable(p,q)->`InstanceVariable(parent_class_signature_identifierp,q)|`Label(p,q)->`Label(label_parent_identifierp,q)moduleSignature=structtypet=Paths_types.Resolved_reference.signatureendmoduleClassSignature=structtypet=Paths_types.Resolved_reference.class_signatureendmoduleDataType=structtypet=Paths_types.Resolved_reference.datatypeendmoduleParent=structtypet=Paths_types.Resolved_reference.parentendmoduleLabelParent=structtypet=Paths_types.Resolved_reference.label_parentendmoduleModule=structtypet=Paths_types.Resolved_reference.module_endmoduleModuleType=structtypet=Paths_types.Resolved_reference.module_typeendmoduleType=structtypet=Paths_types.Resolved_reference.type_endmoduleConstructor=structtypet=Paths_types.Resolved_reference.constructorendmoduleField=structtypet=Paths_types.Resolved_reference.fieldendmoduleExtension=structtypet=Paths_types.Resolved_reference.extensionendmoduleException=structtypet=Paths_types.Resolved_reference.exception_endmoduleValue=structtypet=Paths_types.Resolved_reference.valueendmoduleClass=structtypet=Paths_types.Resolved_reference.class_endmoduleClassType=structtypet=Paths_types.Resolved_reference.class_typeendmoduleMethod=structtypet=Paths_types.Resolved_reference.method_endmoduleInstanceVariable=structtypet=Paths_types.Resolved_reference.instance_variableendmoduleLabel=structtypet=Paths_types.Resolved_reference.labelendmodulePage=structtypet=Paths_types.Resolved_reference.pageendendtypet=Paths_types.Reference.anytypetag_any=Paths_types.Reference.tag_anymoduleSignature=structtypet=Paths_types.Reference.signatureendmoduleClassSignature=structtypet=Paths_types.Reference.class_signatureendmoduleDataType=structtypet=Paths_types.Reference.datatypeendmoduleParent=structtypet=Paths_types.Reference.parentendmoduleLabelParent=structtypet=Paths_types.Reference.label_parentendmoduleModule=structtypet=Paths_types.Reference.module_endmoduleModuleType=structtypet=Paths_types.Reference.module_typeendmoduleType=structtypet=Paths_types.Reference.type_endmoduleConstructor=structtypet=Paths_types.Reference.constructorendmoduleField=structtypet=Paths_types.Reference.fieldendmoduleExtension=structtypet=Paths_types.Reference.extensionendmoduleException=structtypet=Paths_types.Reference.exception_endmoduleValue=structtypet=Paths_types.Reference.valueendmoduleClass=structtypet=Paths_types.Reference.class_endmoduleClassType=structtypet=Paths_types.Reference.class_typeendmoduleMethod=structtypet=Paths_types.Reference.method_endmoduleInstanceVariable=structtypet=Paths_types.Reference.instance_variableendmoduleLabel=structtypet=Paths_types.Reference.labelendmodulePage=structtypet=Paths_types.Reference.pageendend