The Design of a Pretty-printing Library

John Hughes

Abstract

Much of the power of functional programming languages depends on the support they offer for software reuse. To take full advantage of it, the functional programmer should approach a new application area by identifying the programming idioms common in that area, and defining them as (probably) higher-order functions. Each particular application program can then be built largely by combining these functions, rather than writing `new code'. Programming with such an approach is very rapid once the library of combinators is defined, and programs are often correct first time since they are built by assembling correct components.

The question addressed in this paper is: how should libraries of combinators be designed? Our goal is to show how we can use formal specification of the combinators, and a study of their algebraic properties, to guide both the design and implementation of a combinator library. Our case study is a library for pretty-printing. But the methods we present are of wider applicability, and we also show how they can be used to develop a number of different monads.

The paper is available here, and here is a bibtex entry.


John Hughes
Last modified: Fri Aug 9 10:42:27 MET DST 1996