piped alternatives and similar packages
Based on the "Control" category.
Alternatively, view piped 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) -
classy-prelude
Type classes for mapping, folding, and traversing monomorphic containers -
classy-prelude-yesod
Type classes for mapping, folding, and traversing monomorphic containers -
distributed-closure
Serializable closures for distributed programming. -
extensible-effects
Extensible Effects: An Alternative to Monad Transformers -
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 -
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. -
these
An either-or-both data type, with corresponding hybrid error/writer monad transformer. -
hask
Category theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!) -
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 -
distributed-fork
A distributed data processing framework in Haskell. -
cloud-haskell
This is an umbrella development repository for Cloud Haskell -
monad-validate
(NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
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 -
operational
Implement monads by specifying instructions and their desired operational semantics. -
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. -
monad-control
Lift control operations, like exception catching, through monad transformers -
freer-effects
An implementation of "Freer Monads, More Extensible Effects". -
monad-time
Type class for monads which carry the notion of the current time.
Collect and Analyze Billions of Data Points in Real Time
Do you think we are missing an alternative of piped or a related project?
README
Piped
Piped is a is a performant coroutine based steaming library with minimal dependencies.
It was built as a learning exercise and to test the idea of a streaming library without using a sum type to represent state changes. It owes alot to Conduit; the contination passing monad, the default behaviours (demand driven, auto terminating), plus the major part of it's API.
Features
- Depends only on
base
andmtl
. - Flexible composition; demand or supply driven, plus different termination modes.
- Pipes are resumable.
- Composable with existing Conduit pipes using
fromConduit
in piped-conduit.
Quickstart
For now, familiarity with Conduit is assumed, since documentation is not extensive.
import Piped
import qualified Piped.Prelude as P -- for map, foldl, takeWhile and friends
runPiped $ sourceList [1,2,3] .| P.map (+1) .| sinkList
Performance
There isn't a huge difference in performance for small pipelines. Maybe up to about 15% in some cases. However, once you have more stages (source-pipe-pipe-sink) or more, there is a large margin, about 50%. Of course, unless your application is shuttling millions of events per second it doens't make alot of difference, in practice.