Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Recursive modules for programming
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
From structures and functors to modules and units
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
The missing link: dynamic components for ML
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PADS/ML: a functional data description language
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Towards a mechanized metatheory of standard ML
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A type system for recursive modules
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Journal of Functional Programming
Component nextgen: a sound and expressive component framework for java
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Dynamic Translucency with Abstraction Kinds and Higher-Order Coercions
Electronic Notes in Theoretical Computer Science (ENTCS)
Proceedings of the 5th ACM SIGPLAN workshop on Types in language design and implementation
A syntactic type system for recursive modules
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Mixin’ Up the ML Module System
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
The ML module system stands as a high-water mark of programming language support for data abstraction. Nevertheless, it is not in a fully evolved state. One prominent weakness is that module interdependencies in ML are restricted to be acyclic, which means that mutually recursive functions and data types must be written in the same module even if they belong conceptually in different modules. Existing efforts to remedy this limitation either involve drastic changes to the notion of what a module is, or fail to allow mutually recursive modules to hide type information from one another. Another issue is that there are several dialects of ML, and the module systems of these dialects differ in subtle yet semantically significant ways that have been difficult to account for in any rigorous way. It is important to come to a clear assessment of the existing design space and consolidate what is meant by “the ML module system” before embarking on such a major extension as recursive modules. In this dissertation I contribute to the understanding and evolution of the ML module system by: (1) developing a unifying account of the ML module system in which existing variants may be understood as subsystems that pick and choose different features, (2) exploring how to extend ML with recursive modules in a way that does not inhibit data abstraction, and (3) incorporating the understanding gained from (1) and (2) into the design of a new, evolved dialect of ML. I formalize the language of part (3) using the framework of Harper and Stone, in which the meanings of “external” ML programs are interpreted by translation into an “internal” type system. In my exploration of the recursive module problem, I also propose a type system for statically detecting whether or not recursive module definitions are “safe”—that is, whether they can be evaluated without referring to one another prematurely—thus enabling more efficient compilation of recursive modules. Future work remains, however, with regard to type inference and type system complexity, before my proposal can be feasibly incorporated into ML.