Abstract
ML modules and Haskell type classes have proven to be highly effective tools
for program structuring. Modules emphasize explicit configuration of
program components and the use of data abstraction. Type classes emphasize
implicit program construction and ad hoc polymorphism. In this
paper, we show how the implicitly-typed style of type class programming may
be supported within the framework of an explicitly-typed module language by
viewing type classes as a particular mode of use of modules. This view
offers a harmonious integration of modules and type classes, where type
class features, such as class hierarchies and associated types, arise
naturally as uses of existing module-language constructs, such as module
hierarchies and type components. In addition, programmers have explicit
control over which type class instances are available for use by type
inference in a given scope. We formalize our approach as a
Harper-Stone-style elaboration
relation, and provide a sound type
inference algorithm as a guide to implementation.