effin alternatives and similar packages
Based on the "Control" category.
Alternatively, view effin alternatives based on common mentions on social networks and blogs.
-
transient
A full stack, reactive architecture for general purpose programming. Algebraic and monadically composable primitives for concurrency, parallelism, event handling, transactions, multithreading, Web, and distributed computing with complete de-inversion of control (No callbacks, no blocking, pure state) -
distributed-closure
Serializable closures for distributed programming. -
classy-prelude
Type classes for mapping, folding, and traversing monomorphic containers -
auto
Haskell DSL and platform providing denotational, compositional api for discrete-step, locally stateful, interactive programs, games & automations. http://hackage.haskell.org/package/auto -
classy-prelude-yesod
Type classes for mapping, folding, and traversing monomorphic containers -
selective
Selective Applicative Functors: Declare Your Effects Statically, Select Which to Execute Dynamically -
extensible-effects
Extensible Effects: An Alternative to Monad Transformers -
ComonadSheet
A library for expressing "spreadsheet-like" computations with absolute and relative references, using fixed-points of n-dimensional comonads. -
abstract-par
Type classes generalizing the functionality of the 'monad-par' library. -
hask
Category theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!) -
these
An either-or-both data type, with corresponding hybrid error/writer monad transformer. -
transient-universe
A Cloud monad based on transient for the creation of Web and reactive distributed applications that are fully composable, where Web browsers are first class nodes in the cloud -
cloud-haskell
This is an umbrella development repository for Cloud Haskell -
distributed-process-platform
DEPRECATED (Cloud Haskell Platform) in favor of distributed-process-extras, distributed-process-async, distributed-process-client-server, distributed-process-registry, distributed-process-supervisor, distributed-process-task and distributed-process-execution -
distributed-fork
A distributed data processing framework in Haskell. -
monad-validate
(NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
monad-control
Lift control operations, like exception catching, through monad transformers -
effect-monad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
ixmonad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
operational
Implement monads by specifying instructions and their desired operational semantics. -
freer-effects
An implementation of "Freer Monads, More Extensible Effects". -
monad-time
Type class for monads which carry the notion of the current time.
Access the most powerful time series database as a service
Do you think we are missing an alternative of effin or a related project?
README
effin: Extensible Effects
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.
Future Work
- Support for GHC 7.6. This will require
veryextremely heavy abuse ofOverlappingInstances
, but it can be done. Encapsulation of effects.Done.- Improved exceptions. Currently:
TheFixed.finally
function only works with an exception of a single type.- IO/Async exceptions aren't yet supported.
- Support for effects that require linearity. In particular, any
Region
effect would be unsafe because there's no way to ensure that effects likeThread
aren't used simultaneously. Perhaps this can be achieved with something akin to how the IO monad ensures linearity.