Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell

Simon Peyton Jones. Presented at the 2000 Marktoberdorf Summer School. In "Engineering theories of software construction", ed Tony Hoare, Manfred Broy, Ralf Steinbruggen, IOS Press, ISBN 1 58603 1724, 2001, pp47-96.

The tutorial (240k gzipped Postscript, 60 pages) , (270k gzipped PDF), (363k plain PDF). I've revised the notes significantly, with the help of feedback from many people. Last update: 21 Feb 2001.
Powerpoint slides (650k Powerpoint, 110 slides)
Writing High-Performance Server Applications in Haskell, Case Study: A Haskell Web Server, Simon Marlow, Haskell Workshop, Montreal, Canada, Sept 2000. This paper describes the running example in the notes.

This tutorial focuses on explaining the "bits round the edges" of Haskell programs, rather than the beautiful functional core we all know and love. More specifically, it gives, in a single framework, an account of

The common feature of all of these is, of course, the ubiquitous I/O monad. All except the first (basic I/O) involve proposed extensions to Haskell that are implemented in GHC, and I have tried hard to make the tutorial use exactly the same function names as GHC does. All of the extensions are described in conference papers (also available from my home page), but these papers are not tutorials, and were written with varying nomenclature over a period of several years. I hope that this tutorial gives a more comprehensible overview of the big picuture, using a common vocabulary.

The tutorial also gives an operational semantics for everything described except the foreign-language interface part. For this I borrow the framework of operational semantics --- but don't worry! My intention is that you don't need to know a thing about operational semantics to understand the paper.

I occasionally update this tutorial, and I would very much appreciate your help in improving it. If you read it, please let me know of any errors you find and suggestions for improvement.

Simon Peyton Jones, simonpj@microsoft.com