packages feed

effin-0.2.1.2: effin.cabal

name:                effin
version:             0.2.1.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, 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
  >   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.8
  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