Why Functional Programming Matters

John Hughes

This paper dates from 1984, and circulated as a Chalmers memo for many years. Slightly revised versions appeared in 1989 and 1990 in the Computer Journal and the Year of Programming. This version is based on the original Chalmers memo nroff source, lightly edited for LaTeX and to bring it closer to the published versions. Please excuse the slightly old-fashioned type-setting, and the fact that the examples are not in Haskell!


As software becomes more and more complex, it is more and more important to structure it well. Well-structured software is easy to write, easy to debug, and provides a collection of modules that can be re-used to reduce future programming costs. Conventional languages place conceptual limits on the way problems can be modularised. Functional languages push those limits back. In this paper we show that two features of functional languages in particular, higher-order functions and lazy evaluation, can contribute greatly to modularity. As examples, we manipulate lists and trees, program several numerical algorithms, and implement the alpha-beta heuristic (an algorithm from Artificial Intelligence used in game-playing programs). Since modularity is the key to successful programming, functional languages are vitally important to the real world.

The paper is available as postscript and pdf, and here is a bibtex entry. There are even translations into japanese, by Nobuo Yamashita, and chinese, by ShiningRay.

John Hughes
Last modified: Thu Jan 10 22:33:14 MET 2002