Module systems like that of Haskell permit only a weak form of
modularity in which module implementations directly depend 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 talk, I present Backpack, a new language for building
separately-typecheckable packages on top of a weak module system like
Haskell's. Not only does Backpack make Haskell a more modular
language, it establishes an entirely new direction for the design of
so-called package management systems: as typed module languages with
dependencies expressed via typed interfaces rather than names and
version ranges.