Introduce an 'ExceptionMonad' class.
This monad provides variants of 'catch', 'bracket', and 'finally', so exceptions can be handled in monads that wrap IO. The latter two methods need to be part of the class definition, because GHC uses 'block' and 'unblock' which are used in the definition of those two methods for the IO monad. A perhaps better class interface would consist of 'gcatch', 'gblock', and 'gunblock' and let the latter two default to 'id' like is done for non-GHC implementations of 'bracket' and 'finally'.
Showing with 73 additions and 0 deletions