From 2008 I will be teaching a new third-year module, Functional Informatics.
This will explore the paradigm of domain specific languages,
in which programming is viewed as an extension of language design;
starting from the primitive concepts in an application,
we seek a set of combinators that allow primitives
to be assembled into higher-level abstractions.
Non-strict functional programming provides a particularly powerful
vehicle for developing this approach,
and we will be using Haskell to explore DSLs
for applications that include 2D graphics,
motion planning, music, and XML processing.