control-monad-exception-mtl: Explicitly typed, checked exceptions with stack traces
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
In addition to explicitly typed exceptions his package provides:
Support for explicitly documented, unchecked exceptions (via
Control.Monad.Exception.tryEMT
).Support for selective unchecked exceptions (via
Control.Monad.Exception.UncaughtException
).Support for exception call traces via
Control.Monad.Loc.MonadLoc
. Example:
f () = do throw MyException g a = do f a main = runEMT $ do g () `catchWithSrcLoc` \loc (e::MyException) -> lift(putStrLn$ showExceptionWithTrace loc e) -- Running main produces the output: *Main> main MyException in f, Main(example.hs): (1,6) g, Main(example.hs): (2,6) main, Main(example.hs): (5,9) main, Main(example.hs): (4,16)
Downloads
- control-monad-exception-mtl-0.8.0.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.8.0, 0.8.0.1, 0.8.0.2, 0.8.0.3, 0.8.0.4, 0.10.3 |
---|---|
Dependencies | base (>4 && <5), control-monad-exception (>=0.8.0), mtl [details] |
Tested with | ghc ==6.10.3 |
License | LicenseRef-PublicDomain |
Author | Pepe Iborra |
Maintainer | pepeiborra@gmail.com |
Category | Control, Monads, Failure |
Home page | http://pepeiborra.github.com/control-monad-exception |
Source repo | head: git clone git://github.com/pepeiborra/control-monad-exception.git |
Uploaded | by PepeIborra at 2009-12-17T11:22:42Z |
Distributions | |
Reverse Dependencies | 1 direct, 0 indirect [details] |
Downloads | 4913 total (25 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |