What makes a good module system?
What is a module?
In some ObjectOrientedProgrammingLanguages a module is a file that holds a bunch of classes, to make it easy to transfer classes between different systems.
Many ProgrammingLanguages allow the breakdown of a software system (or the bundling of single types and procedures) into packages where the contents of a package share a namespace and can be selectively exported to and imported from other packages.
See LucaCardelli's paper "Program fragments, linking, and modularization", available from http://www.luca.demon.co.uk/Bibliography.htm.
The MlLanguage defines an advanced module system that allows modules to be parametrized with other modules (ParametricModules?, called functors). Also see XavierLeroy?'s paper "A ModularModuleSystem".
See http://library.readscheme.org/page5.html for an online bibliography of (somewhat SchemeLanguage-specific) papers about modules and ComponentOrientedProgramming. See http://readscheme.org/modules/ for a mini-bibliography of research papers related to ModuleSystems for FunctionalProgrammingLanguages.
Also see ComponentDefinition, ModularProgramming