Tackling the Awkward Squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell Simon PEYTON JONES Microsoft Research, Cambridge
[email protected] http://research.microsoft.com/users/simonpj April 7, 2010 Abstract Functional programming may be beautiful, but to write real applications we must grapple with awk- ward 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 appears in the book “Engineering theories of software construction, Marktoberdorf Summer School 2000”, ed CAR Hoare, M Broy, and R Steinbrueggen, NATO ASI Series, IOS Press, 2001, pp47-96. This version has a few errors corrected compared with the published version. Change summary: • Jan 2009: Clarify ν and fn () in Section 3.5; reword the one occurrence of fv () in Section 2.7 • Feb 2008: Fix typo in Section 3.5 • May 2005: Section 6: correct the way in which the FFI declares an imported function to be pure (no “unsafe” necessary). • Apr 2005: Section 5.2.2: some examples added to clarify evaluate. • March 2002: substantial revision 1 Introduction There are lots of books about functional programming in Haskell [44, 14, 7]. They tend to concentrate on the beautiful core of functional programming: higher order functions, algebraic data types, polymorphic type systems, and so on.