Modular Module Systems: a survey discusses different approaches to modularity in programming languages. It covers modules as a way to separate compilation, manage namespaces, and hide/abstract types and values. Different languages take different approaches, from separate files in C to more robust modules in ML and Haskell that allow nesting, signatures, functors, and type classes. The document uses examples from C, C++, ML, Haskell to illustrate how modules have evolved to support separate compilation, abstraction, and reuse through mechanisms like functors and signatures.