effin: A Typeable-free implementation of extensible effects

[ bsd3, control, effect, library ] [ Propose Tags ]

This package implements extensible effects, and alternative to monad transformers. The original paper can be found at http://okmij.org/ftp/Haskell/extensible/exteff.pdf. The main differences between this library and the one described in the paper are that this library does not use the Typeable type class, and has a simpler API for handling effects.

For example, the following code implements a handler for exceptions:

runException :: Effect (Exception e ': es) a -> Effect es (Either e a)
runException = eliminate
    (\x -> return (Right x))
    (\(Exception e) -> return (Left e))

Compare this to the corresponding code in extensible-effects (http://hackage.haskell.org/package/extensible-effects):

runExc :: Typeable e => Eff (Exc e :> r) a -> Eff r (Either e a)
runExc = loop . admin
    loop (Val x) = return (Right x)
    loop (E u)   = handleRelay u loop (\(Exc e) -> return (Left e))

In particular, effect implementors are not required to do any recursion, thereby making effect handlers more composeable.

Versions [faq],,,,,,,,,,
Dependencies base (==4.7.*), mtl (>=2.1 && <3) [details]
License BSD-3-Clause
Copyright (c) 2014 Anthony Vandikas
Author Anthony Vandikas
Maintainer yellpika@gmail.com
Category Control, Effect
Home page https://github.com/YellPika/effin
Source repo head: git clone git://github.com/YellPika/effin.git
Uploaded by AnthonyVandikas at Thu May 22 02:32:16 UTC 2014
Distributions NixOS:
Downloads 5462 total (129 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]





Enable MTL support


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees