
#5902: Cannot tell from an exception handler whether the exception was asynchronous -------------------------------------+------------------------------------ Reporter: simonmar | Owner: simonmar Type: bug | Status: new Priority: high | Milestone: 7.8.1 Component: Compiler | Version: 7.4.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by exbb2): Replying to [comment:21 simonmar]:
Just never catch `SomeException` unless you intend to re-throw it.
The code in my case quickly grew into monstrosity such as {{{ bracket openFile doDangerousStuff close `catches` [\Async -> throw ,\Some -> logFailureAndResume] }}} Even that doesn't work for Timeout, unless we resort to string comparison.
If you're handling an exception, you always know which exception(s) you're handling
No. All arguments and values in function can throw any exception whatsoever, there can be no knowing of what exceptions you'll receive. e.g. what if the next version of base introduces a hard-to-track division by zero? We shouldn't ever care about what exception we got. If it had arisen from code enclosed by the handler, — there can be no doubt as to its intended recipient — and no danger in catching it. Asynchronous exceptions have only dimmest relation to code being executed or none at all, there can be no modularity when every exception handler is concerned with whole state of the universe. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/5902#comment:22 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler