Modules are used to group types and values together to make them easier to find. A module serves the same purpose as a package in Java or namespaces in other languages. A module is identified by a module name within the package. Within a module each type and value is identified using a local name.
A qualified module name is a globally unique identifier for a module. It is represented by a tuple of the package and the module name.
Modules are available at two different levels of detail. A module specification only contains types that are exposed publicly and type signatures for values that are exposed publicly. A module definition contains all the details including implementation and private types and values.
Type that represents a module specification. A module specification only contains types that are exposed publicly and type signatures for values that are exposed publicly.
A module contains types and values which is represented by two field in this type:
Get an empty module specification with no types or values.
Type that represents a module definition. A module definition contains all the details including implementation and private types and values.
A module contains types and values which is represented by two field in this type:
Type variables ta and va refer to type annotation and value annotation
Get an empty module definition with no types or values.
Turn a module definition into a module specification. Only publicly exposed types and values will be included in the result.
Turn a module definition into a module specification. Non-exposed types and values will also be included in the result.
Look up a type specification by its name in a module specification.
Look up a value specification by its name in a module specification.
Look up a value definition by its name in a module specification.
Remove all type attributes from a module specification.
Remove all type attributes from a module definition.
Collect all type references from the module.
Collect all value references from the module.
Collect all type and value references from the module.
Find all the modules that this module depends on.
A module name is a unique identifier for a module within a package. It is represented by a path, which is a list of names.