Why no exceptions in Haskell?

Keith Wansbrough Keith.Wansbrough@cl.cam.ac.uk
Thu, 22 Nov 2001 18:50:31 +0000


> Hello *,
> 
> I am just curious: Why does Haskell not provide exceptions a la SML?
> Why does only the IO monad allow for exceptions?

GHC certainly implements exceptions, along the lines described in

  A semantics for imprecise exceptions, Simon Peyton Jones, Alastair
  Reid, Tony Hoare, Simon Marlow, Fergus Henderson. Proc Programming
  Languages Design and Implementation (PLDI'99), Atlanta.

  http://research.microsoft.com/Users/simonpj/Papers/imprecise-exn.htm

As described there,
 * you can *raise* an exception anywhere,
 * but you can only *catch* an exception in the IO monad.

This is essentially because exceptional behaviour is `impure', and
Haskell's way of dealing with impure behaviour (like files, user
input, global state, and so on) is via the IO monad.

HTH.  There's more in the paper.

--KW 8-)