effin-0.3.0.2: effin.cabal
name: effin
version: 0.3.0.2
synopsis: A Typeable-free implementation of extensible effects
homepage: https://github.com/YellPika/effin
license: BSD3
license-file: LICENSE
author: Anthony Vandikas
maintainer: yellpika@gmail.com
copyright: (c) 2014 Anthony Vandikas
category: Control, Effect
build-type: Simple
cabal-version: >=1.10
description:
This package implements extensible effects, an 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, does not require that effects implement
the Functor type class, and has a simpler API for handling
effects.
.
For example, the following code implements a handler for exceptions:
.
> newtype Exception e = Throw e
>
> runException :: Effect (Exception e :+ es) a -> Effect es (Either e a)
> runException = eliminate
> (\x -> return (Right x))
> (\(Throw e) k -> 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
> where
> 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.
flag mtl
description: Enable MTL support
default: True
manual: True
library
exposed-modules:
Control.Effect,
Control.Effect.Bracket,
Control.Effect.Coroutine,
Control.Effect.Exception,
Control.Effect.Reader,
Control.Effect.Lift,
Control.Effect.List,
Control.Effect.State,
Control.Effect.Thread,
Control.Effect.Witness,
Control.Effect.Writer,
Control.Monad.Effect
other-modules:
Data.Index,
Data.Type.Row,
Data.Type.Nat
Data.Union
build-depends: base >= 4.7 && < 4.10
if flag(mtl)
build-depends: mtl >= 2.1 && < 3
hs-source-dirs: src
default-language: Haskell2010
ghc-options: -Wall
if flag(mtl)
cpp-options: -DMTL
source-repository head
type: git
location: git://github.com/YellPika/effin.git