The purpose of this module is to allow you to capture all exceptions
originating from within the enclosed computation, while still reacting
to asynchronous exceptions aimed at the calling thread.
This way, you can be sure that the function that calls, for example,
catchAny, will still respond to ThreadKilled or Timeout
events raised by another thread (with throwTo), while capturing
all exceptions, synchronous or asynchronous, resulting from the
execution of the enclosed computation.
One particular use case is to allow the safe execution of code from various
libraries (which you do not control), capturing any faults that might
occur, while remaining responsive to higher level events and control
actions.
This library was originally developed by Michael Snoyman for the
ClassyPrelude library, and was latter 'spun-off' into a separate
independent package.
For a more detailed explanation of the motivation behind this functions,
see:
A version of catch which is specialized for any exception. This
simplifies usage as no explicit type signatures are necessary.
Note that since version 0.5.9, this function now has proper support for
asynchronous exceptions, by only catching exceptions generated by the
internal (enclosed) action.
A version of handle which is specialized for any exception. This
simplifies usage as no explicit type signatures are necessary.
Note that since version 0.5.9, this function now has proper support for
asynchronous exceptions, by only catching exceptions generated by the
internal (enclosed) action.
A version of try which is specialized for any exception.
This simplifies usage as no explicit type signatures are necessary.
Note that since version 0.5.9, this function now has proper support for
asynchronous exceptions, by only catching exceptions generated by the
internal (enclosed) action.
an extension to try which ensures that the return value is fully
evaluated. in other words, if you get a right response here, you can be
confident that using it will not result in another exception.
an extension to tryany which ensures that the return value is fully
evaluated. in other words, if you get a right response here, you can be
confident that using it will not result in another exception.