In this chapter, we introduced all the facilities that the Objective CAML
module language offers, in particular parameterized modules.
As all module systems, it reflects the duality
between interfaces and implementations, here presented as a duality
between signatures and structures. Signatures allow hiding
information about type, value or exception definitions.
By hiding type representation, we can make certain types abstract,
ensuring that values of these types can only be manipulated through
the operations provided in the module signature. We saw how to
exploit this mechanism to facilitate sharing of values hidden in
closures, and to offer multiple views of a given implementation.
In the latter case, explicit type sharing annotations are sometimes
necessary to achieve the desired behavior.
Parameterized modules, also called functors, go one step beyond and
support code reuse through simple mechanisms similar to function
abstraction and function application.