machinecell alternatives and similar packages
Based on the "Control" category.
Alternatively, view machinecell alternatives based on common mentions on social networks and blogs.
-
fused-effects
A fast, flexible, fused effect system for Haskell -
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) -
recursion-schemes
Generalized bananas, lenses and barbed wire -
distributed-closure
Serializable closures for distributed programming. -
classy-prelude
Type classes for mapping, folding, and traversing monomorphic containers -
selective
Selective Applicative Functors: Declare Your Effects Statically, Select Which to Execute Dynamically -
auto
Haskell DSL and platform providing denotational, compositional api for discrete-step, locally stateful, interactive programs, games & automations. http://hackage.haskell.org/package/auto -
these
An either-or-both data type, with corresponding hybrid error/writer monad transformer. -
safe-exceptions
Safe, consistent, and easy exception handling -
classy-prelude-yesod
Type classes for mapping, folding, and traversing monomorphic containers -
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. -
hask
Category theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!) -
abstract-par
Type classes generalizing the functionality of the 'monad-par' library. -
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-fork
A distributed data processing framework in 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 -
monad-control
Lift control operations, like exception catching, through monad transformers -
monad-validate
(NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
ixmonad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
effect-monad
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.
TestGPT | Generating meaningful tests for busy devs
Do you think we are missing an alternative of machinecell or a related project?
README
machinecell
Arrow based stream transducer.
Description
As other iteratee or pipe libraries, machinecell abstracts general iteration processes.
Here is an example that is a simple iteration over a list.
>>> run (evMap (+1)) [1, 2, 3]
[2, 3, 4]
In above statement, "evMap
(+1)" has a type "ProcessA (->) (Event Int) (Event Int)",
which denotes "A stream transducer that takes a series of Int as input,
gives a series of Int as output, run on base arrow (->)."
In addition to this simple iteration, machinecell has following features.
- Side effects
- Composite pipelines
- Arrow compositions
- Behaviours and switches
See Control.Arrow.Machine documentation.
Comparison to other libraries.
Some part of machinecell is similar to other stream transducer libraries, namely pipes, conduit, or machines. machinecell can be seen as a restricted variation of them to one-directional. But additionally, machinecell supports arrow compositions. Bidirectional communications can be taken place by ArrowLoop feature.
Rather, there are several other arrowised stream transducer libraries. streamproc shares the most concept to machinecell. But actually it has a problem described later in this post. Machinecell can be said as "Streamproc done right."
auto is a brand-new arrowised stream transducer library. Compared to it, machinecell's advantage is await/yield coroutines, while auto's one is serialization.
Motivation and background
"Generalizing monads to arrows," The original paper of arrow calculation mentions a kind of stream transducer, which later implemented as streamproc.
http://www.cse.chalmers.se/~rjmh/Papers/arrows.pdf
And other people propose instance declarations of Arrow class for several existing stream processors.
http://stackoverflow.com/questions/19758744/haskell-splitting-pipes-broadcast-without-using-spawn
But actually, there is a problem argued in this post.
https://mail.haskell.org/pipermail/haskell-cafe/2010-January/072193.html
The core problem is, while arrow uses tuples as parallel data stream, they cannot represent a composite streams if they carry different numbers of data in parallel.
To solve this problem, some arrow libraries restrict transducers to one-to-one data transformation. Yampa and netwire does so, as mentioned in above post. And auto also takes this approach.
Machinecell's approach is different, but simple too. The key idea is wrapping all types of data stream into a maybe-like type. Then even tuples can represent different numbers of data, by inserting appropreate number of 'Nothing's.
Furthermore, I identified the maybe-like type as the 'Event' type, which appears in Yampa and netwire. Then I successively implemented several arrows of Yampa and netwire.
API names come from stream libraries are named after machines', while ones from FRPs are after Yampa's. Now, machinecell may be seen as a hybrid of machines and Yampa.