Pennsylvania. Presentations included Peter Henderson on func-tional geometry (Henderson, 1982) and an invited talkby Turner onprogramming with infinitedata structures. (It also saw the first pub-lished papers of Hudak, Hughes, and Peyton Jones.) Special guestsat this conference included Church and Curry. The after-dinner talk was given by Barkley Rosser, and received two ovations in the mid-dle, once when he presented the proof of Curry’s paradox, relatingit to the Y combinator, and once when he presented a new proof of the Church-Rosser theorem. LFP became the other key biennialconference.(In 1996, FPCA merged with LFP to become the annual Interna-tional Conference on Functional Programming, ICFP, which re-mains the key conference in the field to the present day.)In August 1987, Ham Richards of the University of Texas andDavid Turner organised an international school on DeclarativeProgramming in Austin, Texas, as part of the UT “Year of Pro-gramming”. Speakers included: Samson Abramsky, John Backus,Richard Bird, Peter Buneman, Robert Cartwright, Simon Thomp-son, David Turner, and Hughes. A major part of the school was acourse in lazy functional programming, with practical classes usingMiranda.All of this led to a tremendous sense of excitement. The simplic-ity and elegance of functional programming captivated the presentauthors, and many other researchers with them. Lazy evaluation—with its direct connection to the pure, call-by-name lambda cal-culus, the remarkable possibility of representing and manipulatinginfinite data structures, and addictively simple and beautiful imple-mentation techniques—was like a drug.(An anonymous reviewer supplied the following: “An interestingsidelight is that the Friedman and Wisepaper inspired Sussman andSteele to examine lazy evaluation in Scheme, and for a time theyweighed whether to make the revised version of Scheme call-by-name or call-by-value. They eventually chose to retain the originalcall-by-value design, reasoning that it seemed to be much easier tosimulate call-by-name in a call-by-value language (using lambda-expressions as thunks) than to simulate call-by-value in a call-by-namelanguage (whichrequires aseparateevaluation-forcing mech-anism). Whatever we might think of that reasoning, we can onlyspeculate on how different the academic programming-languagelandscape might be today had they made the opposite decision.”)
2.2 A tower of Babel
As a result of all this activity, by the mid-1980s there were a num-ber of researchers, including the authors, who were keenly inter-ested in both design and implementation techniques for pure, lazylanguages. In fact, many of us had independently designed our ownlazy languages and were busily building our own implementationsfor them. We were each writing papers about our efforts, in whichwe first had to describe our languages before we could describe ourimplementation techniques. Languages that contributed to this lazyTower of Babel include:
•
Miranda, a successor to SASL and KRC, designed and imple-mented by David Turnerusing SK combinator reduction. WhileSASL and KRC were untyped, Miranda added strong polymor-phic typing and type inference, ideas that had proven very suc-cessful in ML.
•
Lazy ML (LML), pioneered at Chalmers by Augustsson andJohnsson, and taken up at University CollegeLondon by PeytonJones. This effort included the influential development of the
G-machine
, which showed that one could
compile
lazy functionalprograms to rather efficient code (Johnsson, 1984; Augustsson,1984). (Although it is obvious in retrospect, we had becomeused to the idea that laziness meant graph reduction, and graphreduction meant interpretation.)
•
Orwell, a lazy language developed by Wadler, influenced byKRC and Miranda, and OL, a later variant of Orwell. Bird andWadler co-authored an influential book on functional program-ming (Bird and Wadler, 1988), which avoided the “Tower of Babel” by using a more mathematical notation close to bothMiranda and Orwell.
•
Alfl, designed by Hudak, whose group at Yale developed acombinator-based interpreter for Alfl as well as a compilerbased on techniques developed for Scheme and for T (a dialectof Scheme) (Hudak, 1984b; Hudak, 1984a).
•
Id, a non-strict dataflow language developed at MIT by Arvindand Nikhil, whose target was a dataflow machine that they werebuilding.
•
Clean, a lazy language based explicitly on graph reduction,developed at Nijmegen by Rinus Plasmeijer and his colleagues(Brus et al., 1987).
•
Ponder, a language designed by Jon Fairbairn, with an impred-icative higher-rank type system and lexically scoped type vari-ables that was used to write an operating system for SKIM(Fairbairn, 1985; Fairbairn, 1982).
•
Daisy, a lazy dialect of Lisp, developed at Indiana by CordeliaHall,John O’Donnell,andtheircolleagues (HallandO’Donnell,1985).Withthenotable exceptionof Miranda (seeSection3.8),allof thesewere essentially single-sitelanguages, and each individually lackedcritical mass in terms of language-design effort, implementations,and users. Furthermore, although each had lots of interesting ideas,there were few reasons to claim that one language was demonstra-bly superior to any of the others. On the contrary, we felt that theywere all roughly the same, bar the syntax, and we started to wonderwhy we didn’t have a single, common language that we could allbenefit from.At this time, both the Scheme and ML communities had developedtheir own standards. The Scheme community had major loci inMIT, Indiana, and Yale, and had just issued its ‘revised revised’report(Rees andClinger,1986) (subsequent revisions wouldleadtothe‘revised
5
’ report (Kelsey et al.,1998)). Robin Milnerhad issueda ‘proposal for Standard ML’ (Milner, 1984) (which would laterevolve into the definitive
Definition of Standard ML
(Milner andTofte, 1990; Milner et al., 1997)), and Appel and MacQueen hadreleased a new high-quality compiler for it (Appel and MacQueen,1987).
2.3 The birth of Haskell
By 1987, the situation was akin to a supercooled solution—all thatwas needed was a random event to precipitate crystallisation. Thatevent happened in the fall of ’87, when Peyton Jones stopped atYale to see Hudak on his way to the 1987 Functional Program-ming and Computer Architecture Conference (FPCA) in Portland,Oregon. After discussing the situation, Peyton Jones and Hudak decided to initiate a meeting during FPCA, to garner interest in de-signing a new, common functional language. Wadler also stoppedat Yale on the way to FPCA, and also endorsed the idea of a meet-ing.The FPCA meeting thus marked the beginning of the Haskell de-sign process, although we had no name for the language and veryfew technical discussions or design decisions occurred. In fact, akey point that came out of that meeting was that the easiest way tomove forward was to begin with an existing language, and evolve