The control-monad-exception package

[Tags: library, public-domain]

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:

       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)

Properties

Versions0.1, 0.1.1, 0.1.2, 0.2, 0.3, 0.3.1, 0.3.2, 0.4, 0.4.1, 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7, 0.4.8, 0.5, 0.6, 0.8.0, 0.8.0.1, 0.8.0.2, 0.8.0.3, 0.8.0.4, 0.9.0, 0.9.1, 0.10.0, 0.10.1, 0.10.2, 0.10.3, 0.10.3.1, 0.11.1
Dependenciesbase (>=3.0 && <4), extensible-exceptions (==0.1.*), monads-fd (==0.0.*), pretty, template-haskell, transformers (>=0.0.1 && <0.2) or
base (>=3.0 && <4), extensible-exceptions (==0.1.*), mtl, pretty, template-haskell or
base (==4.*), monads-fd (==0.0.*), pretty, template-haskell, transformers (>=0.0.1 && <0.2) or
base (==4.*), mtl, pretty, template-haskell
LicensePublicDomain
AuthorPepe Iborra
Maintainerpepeiborra@gmail.com
Stabilityexperimental
CategoryControl, Monads
Home pagehttp://safe-tools.dsic.upv.es/mediawiki/index.php/Jose_Iborra/Papers/Exceptions
UploadedMon Oct 19 20:40:19 UTC 2009 by PepeIborra
Downloads3162 total (155 in last 30 days)
StatusDocs not available [build log]
All reported builds failed [all 1 reports]

Modules

Flags

NameDescriptionDefault
transformersUse transformers and monads-fd instead of mtlEnabled
extensibleexceptionsUse extensible-exception packageDisabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainers' corner

For package maintainers and hackage trustees