The latest version of control-monad-exception is 0.11.4-0.
control-monad-exception
Version 0.4.6 revision 0 uploaded by PepeIborra.
Package meta
- Synopsis
- Explicitly typed, checked exceptions with stack traces
- Description
This package provides explicitly typed, checked exceptions as a library.
Computations throwing different types of exception can be combined seamlessly.
Example
data Expr = Add Expr Expr | Div Expr Expr | Val Double eval (Val x) = return x eval (Add a1 a2) = do v1 <- eval a1 v2 <- eval a2 let sum = v1 + v2 if sum < v1 || sum < v2 then throw SumOverflow else return sum eval (Div a1 a2) = do v1 <- eval a1 v2 <- eval a2 if v2 == 0 then throw DivideByZero else return (v1 / v2)
data DivideByZero = DivideByZero deriving (Show, Typeable) data SumOverflow = SumOverflow deriving (Show, Typeable)
instance Exception DivideByZero instance Exception SumOverflow
GHCi infers the following types
eval :: (Throws DivideByZero l, Throws SumOverflow l) => Expr -> EM l Double eval `catch` \ (e::DivideByZero) -> return (-1) :: Throws SumOverflow l => Expr -> EM l Double runEM(eval `catch` \ (e::SomeException) -> return (-1)) :: Expr -> Double
This package provides, among other things:
Support for explicitly documented, unchecked exceptions (with tryEM).
Support for selective unchecked exceptions (with UncaughtException).
Support for exception stack traces (experimental). Example:
f () = $withLocTH $ throw MyException g a = $withLocTH $ f a main = runEMT $ $withLocTH $ do g () `catchWithSrcLoc` \loc (e::MyException) -> lift(putStrLn$ showExceptionWithTrace loc e)
-- Running main produces the output:
*Main> main MyException in Main(example.hs): (12,6) Main(example.hs): (11,7)
- Author
- Pepe Iborra
- Bug reports
- n/a
- Category
- Control, Monads
- Copyright
- n/a
- Homepage
- http://safe-tools.dsic.upv.es/mediawiki/index.php/Jose_Iborra/Papers/Exceptions
- Maintainer
- pepeiborra@gmail.com
- Package URL
- n/a
- Stability
- experimental