packages feed

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