Consider a language such as Ada or Modula-2, in which a module $M$ can be divided into a specification (header) file and an implementation (body) file for the purpose of separate compilation (Section 10.2.1). Should $M$ 's specification itself be separately compiled, or should the compiler simply read it in the process of compiling M's body and the bodies of other modules that use abstractions defined in $M$ ? If the specification is compiled, what should the output consist of?