control-monad-exception-0.3.2: Explicitly typed exceptions

The control-monad-exception package

This package provides explicitly typed, checked exceptions as a library. 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

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
Dependenciesbase (≥3.0 & <4), extensible-exceptions (0.1.*), monads-fd (0.0.*), transformers (≥0.0.1 & <0.2) or
base (4.*), monads-fd (0.0.*), transformers (≥0.0.1 & <0.2)
LicensePublicDomain
AuthorPepe Iborra
Maintainerpepeiborra@gmail.com
Stabilityexperimental
CategoryControl, Monads
Home pagehttp://github.com/pepeiborra/control-monad-exception
Upload dateTue Sep 15 17:12:35 UTC 2009
Uploaded byPepeIborra
Built onghc-6.10, ghc-6.12

Modules

Downloads