|
|
|
# Imprecise Exceptions
|
|
|
|
|
|
|
|
**Ticket:**[\#39](https://gitlab.haskell.org//haskell/prime/issues/39)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
See [ExtensionDescriptionHowto](extension-description-howto) for information on how to write these extension descriptions. Please add any new extensions to the list of [HaskellExtensions](haskell-extensions).
|
|
|
|
|
|
|
|
|
|
|
|
## Brief Explanation
|
|
|
|
|
|
|
|
|
|
|
|
In Haskell 98, exceptions may be caught and thrown only in the `IO` monad.
|
|
|
|
The `error` function generates failures from pure code, but cannot be caught.
|
|
|
|
|
|
|
|
Exceptions may be thrown by pure code and caught in the `IO` monad.
|
|
|
|
|
|
|
|
Imprecise exceptions may be thrown by pure code and caught in the `IO` monad.
|
|
|
|
IO exceptions and `error` are subsumed as special cases.
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
|
|
|
|
|
|
- [ A semantics for imprecise exceptions](http://research.microsoft.com/Users/simonpj/Papers/imprecise-exn.htm), Simon Peyton Jones, Alastair Reid, Tony Hoare, Simon Marlow and Fergus Henderson. PLDI 1999.
|
|
|
|
- [ Control.Exception](http://www.haskell.org/ghc/dist/current/docs/libraries/base/Control-Exception.html)
|
|
|
|
- [ExtensibleExceptions](extensible-exceptions)
|
|
|
|
|
|
|
|
## Pros
|
|
|
|
|
|
|
|
|
|
|
|
- more robust programs
|
|
|
|
- implemented by GHC and Hugs for several years
|
|
|
|
|
|
|
|
## Cons
|
|
|
|
|
|
|
|
|
|
|
|
- complicates denotational semantics a little |
|
|
|
- very tricky to implement properly
|
|
|
|
- requires non-trivial run-time support and implementation constraints |