This thesis is an exploration – an exploration of a language extension of the functional programming language Haskell. The extension is called Generic Haskell, albeit the name has been used to refer to different objects over the last several years: Many papers have described different proposals, features, variations, and generations of the language. One purpose of this thesis is to do away with at least part of this fuzziness: everything is described in a common notation and from a single starting point. The other purpose is to simply give a complete overview of the language: we will systematically explain the core features of Generic Haskell, and several extensions, all with motivating examples and details on how the features can be implemented.
Before we start our exploration, though, Section 1.1 will explain the idea and motivation behind generic programming which, at the same time, is the motivation for the design of Generic Haskell. After that, Section 1.2 will give an overview of the history of Generic Haskell. In Section 1.3 we discuss other important approaches to generic programming. In the last section of this chapter, Section 1.4, we give an overview of all the chapters of this thesis, their contents, the papers they are based on, and how they are interconnected.