A Collection of Papers on Functional Programming

Haskell vs. Ada vs. C++ vs Awk vs. ... An experiment in Software Prototyping Productivity

compares a number of programming languages in a prototyping experiment conducted by the US Advanced Research Project Agency (ARPA) and others. Among the results: The prototype required 83 lines of code and 10 hours of development time when coded in Haskell. The figures for Ada were 767 lines / 23 hours, and for C++ 1105 lines. A graduate student who first got 8 days to learn Haskell wrote a prototype in 8 hours! [HJ94] PostScript

Why Functional Programming Matters

describes a philosophy of functional programming. Why should one use it? How can one use it best? [Hug89] PostScript

The semantic elegance of applicative languages

discusses the advantages of functional programming and solves a non-trivial problem very elegantly as an example. The problem is enumerating all the paraffins (a certain kind of molecule). [Tur81]

The promise of domain-specific languages

Paul Hudak's slides from his keynote address to the USENIX DSL conference, 1997. Discusses embedding domain specific languages in Haskell, an idea very close to programming with combinators.

Modular domain-specific languages and tools

A full paper by Hudak on the same topic, from the International Conference on Software Reuse 1998, including discussion of modular interpreters, the role of partial evaluation, and so on.

Using circular programs to eliminate multiple traversals of data

explains the technique of `circular programming', in which the result of a function is passed back to it as an argument. The technique enables some programs which seem to need side-effects, such as back-patching generated assembly code with label addresses, to be expressed efficiently without them. It also depends crucially on lazy evaluation: if you understand this paper, you'll understand laziness. [Bir84]

Heap profiling of lazy functional programs

introduces a method and a tool for observing the space use of functional programs. Once you know where the space is used you can try to reduce it. Includes an impressive example of the reduction obtained for a medium-simple program. [RW93] PostScript

New dimensions in heap profiling

develops the heap profiler by adding among other things `retainer profiling', which answers the question `why isn't this data garbage collected?'. [RR94]

Monads for functional programming

a tutorial on monads, a tool for structuring functional programs, and a guide for designing combinator libraries. Monads offer off-the-shelf solutions for modelling many `non-functional' features, such as exceptions, state, back-tracking, and jumps. Moreover `monadic' programs are easy to modify if new features are needed at a later date. Monads are a relatively recent and very important development in functional programming. [Wad93] PostScript

The essence of functional programming

a less tutorial introduction to monads, which overlaps with the above, but goes further by discussing continuations. Continuations enable functional programs to simulate jumps, co-routines, multiple processes etc. [Wad92] PostScript

How to declare an imperative

shows how monads can be used to perform I/O and call C directly from Haskell, without losing Haskell's `functional' properties. Implemented in the Glasgow (sometimes known as `Glorious') Haskell compiler. [Wad95] PostScript

Structuring Depth-First Search Algorithms in Haskell

for years it was an open problem whether graph algorithms (e.g. strongly connected components) could be expressed efficiently in functional languages. This paper shows how they can. [KL95] PostScript

Functional geometry

a very well-known paper describing a library of functions for simple graphics. The functions are used to draw one of M.C. Escher's woodcuts. [Hen82]

A functional animation starter kit

describes a library of functions for making simple animations, in the same spirit as `functional geometry'. [Ary94]

Pretty-printing: an exercise in functional programming

another example of designing a library, in this case for pretty-printing. The library defines five combinators for constructing documents with alternative layouts, from which the `prettiest' is then chosen. The combinators are specified formally and several alternative implementations derived. [Hug95] PostScript

References

Ary94
Kavy Arya. A functional animation starter-kit. Journal of Functional Programming, 4(1):1--18, January 1994.

Bir84
R. S. Bird. Using Circular Programs to Eliminate Multiple Traverals of Data. Acta Informatica, 21:239--250, 1984.

Hen82
P. Henderson. Functional geometry. In Conference Record of the 1982 Symposium on LISP and Functional Programming, Pittsburgh, PA, New York, NY, 1982. ACM.

HJ94
Paul Hudak and Mark P. Jones. Haskell vs. Ada Vs. C++ vs Awk vs ... An Experiment in Software Prototyping Productivity. Technical report, Yale, July 1994.

Hug89
J. Hughes. Why Functional Programming Matters. Computer Journal, 32(2), 1989.

Hug95
John Hughes. The Design of a Pretty-printing Library. In J. Jeuring and E. Meijer, editors, Advanced Functional Programming, pages 53--96. Springer Verlag, LNCS 925, 1995.

KL95
David King and John Launchbury. Structuring Depth-First Search Algorithms in Haskell. In Proceedings of the 22'nd Symposium on Principles of Programming Languages, San Francisco, Jan 1995.

RW93
Colin Runciman and David Wakeling. Heap profiling of lazy functional programs. Journal of Functional Programming, 3(2):217--245, April 1993.

Tur81
D. A. Turner. The Semantic Elegance of Applicative Languages. In Proceedings 1981 Conference on Functional Languages and Computer Architecture, Wentworth-by-the-Sea, Portsmouth, New Hampshire, 1981.

Wad92
P. Wadler. The essence of functional programming. In Proceedings 1992 Symposium on principles of Programming Languages, pages 1--14, Albuquerque, New Mexico, 1992.

Wad93
P. Wadler. Monads and functional programming. In M. Broy, editor, Proceedings of the 1992 Marktoberdorf international summer school on program design calculi. Springer Verlag, 1993.

Wad95
Phil Wadler. How to declare an imperative. In Proceedings of the International Logic Programming Symposium, 1995. MIT Press, December 1995. Invited paper.

About this document ...

A Collection of Papers on Functional Programming

This document was generated using the LaTeX2HTML translator Version 95 (Thu Jan 19 1995) Copyright © 1993, 1994, Nikos Drakos, Computer Based Learning Unit, University of Leeds.

The command line arguments were:
latex2html -no_navigation -split 0 overview.tex.

The translation was initiated by Magnus Carlsson on Tue Jan 9 14:12:16 MET 1996


Magnus Carlsson
Tue Jan 9 14:12:16 MET 1996