name: control-monad-exception version: 0.1.2 Cabal-Version: >= 1.2.3 build-type: Simple license: PublicDomain author: Pepe Iborra maintainer: pepeiborra@gmail.com homepage: http://github.com/pepeiborra/control-monad-exception description: This package provides explicitly typed 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 synopsis: Explicitly typed exceptions category: Control, Monads stability: experimental Library buildable: True build-depends: base >= 4.0, transformers, monads-fd extensions: MultiParamTypeClasses, FunctionalDependencies, OverlappingInstances, FlexibleInstances, EmptyDataDecls, DeriveDataTypeable, UndecidableInstances exposed-modules: Control.Monad.Exception.Class Control.Monad.Exception