Haskell is both the culmination and solidification of many years of research on lazy functional languages. This report defines the syntax for Haskell programs and an informal abstract semantics for the meaning of such programs. 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.