Any declarations in the parent module, including those in the parent module’s implementation section, are visible in the parent’s sub-modules, including indirect sub-modules (i.e. sub-sub-modules, etc.). Similarly, declarations in the interfaces of any modules imported using an ‘:- import_module’ or a ‘:- use_module’ in the parent module are visible in the parent’s sub-modules, including indirect sub-modules.
Declarations in a child module are not visible in the parent module, or in “sibling” modules (other children of the same parent), or in other unrelated modules unless the child is explicitly imported using an ‘:- import_module’ or ‘:- use_module’ declaration. It is an error to import a module without importing all of its parent modules.
Note that a sub-module for which the ‘:- module’ or ‘:- include_module’ declaration occurs only in the implementation section of the parent module may only be imported or used by its parent module or by sub-modules of its parent module.
Note that as mentioned previously, all ‘:- import_module’ and ‘:- use_module’ declarations must use fully-qualified module names.