implementation: {impl-phrase;;
} impl-phrase: expr | value-definition | type-definition | exception-definition | directive value-definition:let
[rec
] let-binding {and
let-binding}
A module implementation consists in a sequence of implementation phrases, terminated by double semicolons. An implementation phrase is either an expression, a value definition, a type or exception definition, or a directive. At run-time, implementation phrases are evaluated sequentially, in the order in which they appear in the module implementation.
Implementation phrases consisting in an expression are evaluated for their side-effects.
Value definitions bind global value variables in the same way as a
let
...in
... expression binds local variables. The
expressions are evaluated, and their values are matched against the
left-hand sides of the =
sides, as explained in
section 3.8. If the matching succeeds, the bindings of
identifiers to values performed during matching are interpreted as
bindings to the global value variables whose local name is the
identifier, and whose module name is the name of the module.
If the matching fails, the exception Match_failure is
raised. The scope of these bindings is the phrases that follow the
value definition in the module implementation.
Type and exception definitions introduce type constructors, variant constructors and record labels as described in sections 3.9 and 3.9. The scope of these definitions is the phrases that follow the value definition in the module implementation. The evaluation of an implementation phrase consisting in a type or exception definition produces no effect at run-time.
Directives modify the behavior of the compiler on the subsequent phrases of the module implementation, as described in section 3.10. The evaluation of an implementation phrase consisting in a directive produces no effect at run-time. Directives apply only to the module currently being compiled; in particular, they have no effect on other modules that refer to globals exported by the module being compiled.