Unit ids are modules that can appear in the filesystem, whether or not a developer wrote the module or MlFront generated the module or the module has been bundled with many others into a library archive. All modules ids and all package ids are unit ids.
A UnitId is the information available purely from the file path in the file system. As a special case, a module bundled into a library archive is a file path with a segment; for example: "share/DkSDKCoder_Us/DkDriver/dkproject.jsonc#DkDriver_ExecO__".
Some modules, like implicit and optimistic modules, can't be identified purely from the file system. Use a ModuleId.t if the module identity is fully known or a PackageId.t if the package identity is fully known.
parse_reversibly ?sep s should be able to invert any path on the filesystem that conforms to MlFront conventions. So any open__ or Open__ will translate to the special libopen module, etc.
By default the separator sep is "__".
Known Issues:
1. The string "MlStd_StdO__" will be translated to the special module Open__ for the library "MlStd_Std" incorrectly. The string "MlStd_StdO____Open__" is translated correctly as the special module. You should use LibraryId.parse_special before using this function.
effective_package_id unit_id is the package id when the unit unit_id is a `PackageId or the proxy package id when the unit is a `SpecialModuleId with the proxy module type SpecialModuleId.typ.ProxyModule.
effective_standard_module_id unit_id is the standard module id when the unit unit_id is a standard module `PackageId or the proxy id when the unit is a `SpecialModuleId with the proxy module type SpecialModuleId.typ.ProxyModule.