
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-)