effect-handlers: A library for writing extensible algebraic effects and handlers. Similar to extensible-effects but with deep handlers.

[ control, library, mit ] [ Propose Tags ]

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:

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.

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

[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.0.5, 0.1.0.6, 0.1.0.7, 0.1.0.8
Dependencies base (>=4.7 && <5), free (>=4.9 && <5), kan-extensions (>=4.1 && <6), mtl (>=2.1 && <3) [details]
License MIT
Author Andraz Bajt, Blaz Repas
Maintainer Andraz Bajt <andraz@bajt.me>
Category Control
Home page https://github.com/edofic/effect-handlers
Bug tracker https://github.com/edofic/effect-handlers/issues
Uploaded by edofic at 2016-04-28T15:06:03Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 7078 total (25 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2016-11-26 [all 1 reports]

Readme for effect-handlers-0.1.0.8

[back to package description]

effect-handlers

This is an extensible effects library for Haskell taking inspiration from the Eff language.

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

Implementation wise it's most close to 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).

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