We leave as implementation dependent the ways in which Haskell programs are to be manipulated, interpreted, compiled, etc. In this section, we describe the abstract syntactic and semantic structure of Haskell , as well as how it relates to the organization of the rest of the report. At the topmost level a Haskell program is a set of modules , described in Section 5 . Modules provide a way to control namespaces and to re-use software in large programs. The top level of a module consists of a collection of declarations , of which there are several kinds, all described in Section 4 .
Declarations define things such as ordinary values, datatypes, type classes, and fixity information.
At the next lower level are expressions , described in Section 3 . At the bottom level is Haskell 's lexical structure , defined in Section 2 . The lexical structure captures the concrete representation of Haskell programs in text files. This report proceeds bottom-up with respect to Haskell 's syntactic structure. Also, there are several appendices describing the Prelude, the concrete syntax, literate programming, the specification of derived instances, and pragmas supported by most Haskell compilers.