Software usually works with structured information; think of Web-browsers and HTML-documents. This structure can be represented by a data type, a DTD (Document Type Definition), or a model. If such a type changes, all programs that work on that type have to be changed too, although often the central problem does not change.
In the course on generic programming we will discuss methods with which problems can be formulated and solved for arbitrary data types, DTDs, or models. In a sense, this is a course on model-driven development, but the model is a type. The result is a generic program. An example of a generic program is a program for developing web shops: given the structure of the product you want to sell, you want to generate web forms, and database transactions based on this structure. By specialising to a given type we get a normal, type-specific program. Many design patterns are also instances of generic programs. In contrast with MDD methods, or design patterns, the focus of this course is on types, which gives many possibilities for constructing correct and abstract code, based on sound theories.
In the course we will discuss generic programming by means of a number of example problems. You will also see some basic lambda calculus, which can be used to type-check and specialize generic programs. We will use both a couple of generic programming libraries for Haskell and the programming language Generic Haskell, an extension of Haskell that supports generic programming.