Fulfilling OCaml Modules with Transparency
Clement, Blaudeau, Rémy, Didier, and Radanne, Gabriel
Proc. ACM Program. Lang., vol. 8, Apr, 2024
ML modules come as an additional layer on top of a core
language to offer large-scale notions of composition and
abstraction. They largely contributed to the success of
OCaml and SML. While modules are easy to write for common
cases, their advanced use may become tricky. Additionally,
despite a long line of works, their meta-theory remains
difficult to comprehend, with involved soundness
proofs. In fact, the module layer of OCaml does not
currently have a formal specification and its
implementation has some surprising behaviors. Building on
previous translations from ML modules to Fω, we propose a
type system, called Mω, that covers a large subset of
OCaml modules, including both applicative and generative
functors, and extended with transparent ascription. This
system produces signatures in an OCaml-like syntax
extended with Fω quantifiers. We provide a reverse
translation from Mω signatures to path-based source
signatures along with a characterization of signature
avoidance cases, making Mω signatures well suited to serve
as a new internal representation for a typechecker. The
soundness of the type system is shown by elaboration in
Fω. We improve over previous encodings of sealing within
applicative functors, by the introduction of transparent
existential types, a weaker form of existential types that
can be lifted out of universal and arrow types. This
shines a new light on the form of abstraction provided by
applicative functors and brings their treatment much
closer to those of generative functors.