Functional programming may be beautiful, but to write real applications we must grapple with awkward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages. These lecture notes give an overview of the techniques that have been developed by the Haskell community to address these problems. I introduce various proposed extensions to Haskell along the way, and I offer an operational semantics that explains what these extensions mean. This tutorial was given at the Marktoberdorf Summer School 2000. It will appear in the book “Engineering theories of software construction”, to be published in the NATO ASI series during 2001. This version has a few errors corrected compared with the published version. Last revision:
|
1128
|
Monads for functional programming
– Wadler
- 1992
|
|
399
|
The Theory and Practice of Concurrency
– Roscoe
- 1997
|
|
393
|
Comprehending monads
– Wadler
- 1992
|
|
393
|
A syntactic approach to type soundness
– Wright, Felleisen
- 1994
|
|
354
|
Computational Lambda-Calculus and Monads
– Moggi
- 1989
|
|
275
|
Denotational semantics: a methodology for language development
– Schmidt
- 1986
|
|
204
|
The revised report on the syntactic theories of sequential control and state
– Felleisen, Hieb
- 1992
|
|
156
|
Systems Programming with Modula-3
– NELSON
- 1991
|
|
148
|
A natural semantics for lazy evaluation
– Launchbury
- 1993
|
|
145
|
Concurrent Haskell
– Jones, Gordon, et al.
- 1996
|
|
111
|
Communicating and Mobile Systems: the Pi-Calculus
– Milner
- 1999
|
|
100
|
Algebraic reconstruction of types and effects
– Jouvelot, Gifford
- 1991
|
|
94
|
How to Declare an Imperative
– Wadler
- 1997
|
|
93
|
Compiling Standard ML to Java bytecodes
– Benton, Kennedy, et al.
- 1998
|
|
86
|
Concurrent Programming in ML
– Reppy
- 1999
|
|
72
|
Haskell—The Craft of Functional Programming
– Thompson
- 1999
|
|
56
|
The marriage of effects and monads
– Wadler
- 1998
|
|
51
|
Calling hell from heaven and heaven from hell
– Finne, Leijen, et al.
- 1999
|
|
43
|
Asemantics for imprecise exceptions
– Jones, Reid, et al.
- 1999
|
|
39
|
H/Direct: a binary foreign language interface for Haskell
– Finne, Leijen, et al.
|
|
37
|
Algorithm + strategy = parallelism
– Trinder, Hammond, et al.
- 1998
|
|
35
|
Asynchronous exceptions in haskell
– Marlow, Jones, et al.
- 2001
|
|
29
|
Uniqueness typing for functional languages with graph rewriting semantics
– Barendsen, Smetsers
- 1996
|
|
28
|
Expressing and reasoning about non-deterministic functional programs
– Hughes, O'Donnell
- 1989
|
|
28
|
On embedding a microarchitectural design language within Haskell
– Launchbury, Lewis, et al.
|
|
24
|
Algebraic reconstruction of types and eects
– Jouvelot, Giord
- 1991
|
|
23
|
effects, and transformations
– Benton, Kennedy
- 1999
|
|
20
|
A practical introduction to denotational semantics
– Allison
- 1986
|
|
20
|
Stretching the storage manager: weak pointers and stable names in Haskell
– Jones, Marlow, et al.
- 1999
|
|
18
|
Finalization in the collector interface
– Hayes
- 1992
|
|
18
|
The Haskell school of Expression
– Hudak
- 2000
|
|
17
|
Card: a foreign-language interface for Haskell
– Nordin, Jones, et al.
- 1997
|
|
16
|
Correctness of monadic state: An imperative call-by-need calculus
– Ariola, Sabry
- 1998
|
|
16
|
Scripting COM components in Haskell
– Jones, Simon, et al.
- 1998
|
|
13
|
MCORBA: a CORBA binding for Mercury
– Jeffery, Dowd, et al.
- 1999
|
|
13
|
The marriage of eects and monads
– Wadler
- 1998
|
|
12
|
Optimizing ML using a hierarchy of monadic types
– Tolmach
- 1998
|
|
7
|
Writing high-performance server applications in haskell
– Marlow
|
|
6
|
C -> Haskell: yet another interfacing tool
– Chakravarty
- 1999
|
|
4
|
Tool integration in a functional programming language
– KARLSEN
- 1998
|
|
3
|
as an automation controller
– LEIJEN, HOOK
- 1999
|
|
3
|
Lambada: Haskell as a better Java
– MEIJER, FINNE
- 2000
|
|
3
|
Public report of the SADLI project: safety assurance in diagnostic laboratory imaging
– POOLE
- 1995
|
|
3
|
eects, and transformations
– Benton, Kennedy
- 1999
|
|
2
|
Concurrent programming in Erlang (2nd edition
– WIKSTROM, WILLIAMS
- 1996
|
|
2
|
On the expressiveness of purely-functional I/O systems
– HUDAK, SUNDARESH
- 1989
|