Applicative functors and fully transparent higher-order modules
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Program fragments, linking, and modularization
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Units: cool modules for HOT languages
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
A type-theoretic interpretation of standard ML
Proof, language, and interaction
The Definition of Standard ML
A formal specification of the Haskell 98 module system
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Type-Safe linking with recursive DLLs and shared libraries
ACM Transactions on Programming Languages and Systems (TOPLAS)
Journal of Functional Programming
A static semantics for Haskell
Journal of Functional Programming
Numbering matters: first-order canonical forms for second-order recursive types
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
Polymorphic bytecode: compositional compilation for Java-like languages
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Mixin modules in a call-by-value setting
ACM Transactions on Programming Languages and Systems (TOPLAS)
Scalable component abstractions
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
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
A separate compilation extension to standard ML
Proceedings of the 2006 workshop on ML
J&: nested intersection for scalable software composition
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History 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
Acute: High-level programming language design for distributed computation
Journal of Functional Programming
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
Flexible type-safe linking of components for java-like languages
JMLC'06 Proceedings of the 7th joint conference on Modular Programming Languages
Mixin’ Up the ML Module System
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
Module systems like that of Haskell permit only a weak form of modularity in which module implementations depend directly on other implementations and must be processed in dependency order. Module systems like that of ML, on the other hand, permit a stronger form of modularity in which explicit interfaces express assumptions about dependencies, and each module can be typechecked and reasoned about independently. In this paper, we present Backpack, a new language for building separately-typecheckable *packages* on top of a weak module system like Haskell's. The design of Backpack is inspired by the MixML module calculus of Rossberg and Dreyer, but differs significantly in detail. Like MixML, Backpack supports explicit interfaces and recursive linking. Unlike MixML, Backpack supports a more flexible applicative semantics of instantiation. Moreover, its design is motivated less by foundational concerns and more by the practical concern of integration into Haskell, which has led us to advocate simplicity---in both the syntax and semantics of Backpack---over raw expressive power. The semantics of Backpack packages is defined by elaboration to sets of Haskell modules and binary interface files, thus showing how Backpack maintains interoperability with Haskell while extending it with separate typechecking. Lastly, although Backpack is geared toward integration into Haskell, its design and semantics are largely agnostic with respect to the details of the underlying core language.