packages feed

control-monad-exception-0.1: control-monad-exception.cabal

name: control-monad-exception
version: 0.1
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
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