interface: {intf-phrase;;
} intf-phrase: value-declaration | type-definition | exception-definition | directive value-declaration:value
ident:
typexpr {and
ident:
typexpr}
Module interfaces declare the global objects (value variables, type
constructors, variant constructors, record labels) that a module
exports, that is, makes available to other modules.
Other modules can refer to these globals using qualified identifiers
or the #open directive, as explained in section .
A module interface consists in a sequence of interface phrases, terminated by double semicolons. An interface phrase is either a value declaration, a type definition, an exception definition, or a directive.
Value declarations declare global value variables that are exported by the module implementation, and the types with which they are exported. The module implementation must define these variables, with types at least as general as the types declared in the interface. The scope of the bindings for these global variables extends from the module implementation itself to all modules that refer to those variables.
Type or exception definitions introduce type constructors, variant
constructors and record labels as described in sections
and
. Exception definitions and type
definitions that are not abstract type declarations also take effect
in the module implementation; that is, the type constructors, variant
constructors and record labels they define are considered bound on
entrance to the module implementation, and can be referred to by the
implementation phrases. Type definitions that are not abstract type
declarations must not be redefined in the module implementation. In
contrast, the type constructors that are declared abstract in a module
interface must be defined in the module implementation, with the same names.
Directives modify the behavior of the compiler on the subsequent
phrases of the module interface, as described in
section . Directives apply only to the interface
currently being compiled; in particular, they have no effect on other
modules that refer to globals exported by the interface being
compiled.