CS 613: Design and Implementation of Functional Programming Languages

Instructor : Amitabha Sanyal


That's me, in xfig

Last updated on:  21st July 2003.

Outline of Lectures 1, 2 and 3



Welcome to the course on Functional Programming Languages. I shall use this page to:

Course Contents


 Annotated References

The first two references are for motivation.  The first paper reports an experiment to evaluate different programming languages for their ability to aid writing a prototype for a significantly large software. Read for yourself  why Haskell rated way above most other languages. The second paper, shows how the two distinctive features of functional programming languages, namely higher order functions and lazy evaluation, play important roles as powerful combining aids or glues in the development of software. We shall use the next paper for a guided tour of Haskell. But be warned that the material is not as gentle as it sounds. This is the language manual, the final arbiter. The next reference is a masterly introduction to functional programming. However, there is a single copy in the library, in which the examples are in Miranda instead of Haskell. I am trying to acquire copies of a later edition which uses Haskell. Lambda calculus plays important roles as a) a model of computation, and b) in implementation of functional programming languages. A comprehensive treatment of lambda calculus is available in the text by Barendregt.

On the topic of  type systems and type inferencing, you have the following references:

The next few references are on implementation of functional programming languages. As you will learn, because of the large semantic gap between a  language like Haskell and a real machine, the compilation process is divided into two steps. In the first, the functional program is translated into instructions of an abstract machine, which, in the second step, are converted into instructions of the real machine. The first book is a classic reference. It uses G-machine as the abstract machine. The second paper introduces the Three Instruction Machine (TIM), and the third reference, a nearly 100 page paper, introduces the state-of-art Spineless Tagless G-Machine.

There is a draft of a later book by Simon Peyton-Jones. You might want to use it as a reference.

This is a list of papers on assorted topics.
  • Philip Wadler, How to declare an Imperative
  • Philip Wadler, The essence of functional programming.
  • Jeremy Gibbons, Calculating Functional Programs
  • Graham Hutton, A Tutorial on the Universality and Expressiveness of fold.

  • General reading on Functional Programming