packages feed

effect-handlers-0.1.0.0: README.md

# effect-handlers

This is an extensible effects library for Haskell taking inspiration from the [Eff language](http://www.eff-lang.org/).

See these papers for the ideas and theory behind the library:

  - [O. Kammar et al: Handlers in Action!](http://homepages.inf.ed.ac.uk/slindley/papers/handlers.pdf)
  - [A. Bauer, M. Pretnar: Programming with Algebraic Effects and Handlers](http://arxiv.org/abs/1203.1539)
  - [O Kiselyov, A Sabry, C Swords: Extensible Effects](http://dl.acm.org/citation.cfm?id=2503791)

Implementation wise it's most close to [extensible-effects](http://hackage.haskell.org/package/extensible-effects) (also see the Extensible Effects paper) but it implements deep handlers instead of shallow.

## What does this library provide?
There is the `Eff` monad type and modules for pre-implemented effects.

  - `Exception`
  - `IO`
  - `Reader`
  - `Search`
  - `State`
  - `Writer`

It is easy to define your own effects and combine them.


## Example
Most of the types are inferred, you only need to provide enough to tell the compiler how to specialize some effect handlers (e.g. readerHandler).

```haskell
import Control.Effects.Cont.Eff
import Control.Effects.Cont.Reader
import Control.Effects.Cont.Exception

program = do
  v <- ask
  if v < 15 
  then throw $ show v
  else return (v+1)

run n = runPure 
                 . handle exceptionHandler 
                 . handle (readerHandler n)

res :: Integer -> Either String Integer
res n = run n program
```

## Documentation
Haddock docs are [available online](http://edofic.github.io/effect-handlers)