The latest version of control-monad-exception is 0.11.4-0.

control-monad-exception

Version 0.4.7 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://pepeiborra.github.com/control-monad-exception
Maintainer
pepeiborra@gmail.com
Package URL
n/a
Stability
experimental

Components