Ecosyste.ms: Repos
An open API service providing repository metadata for many open source software ecosystems.
Package Usage: hackage: streaming
This package contains two modules, Streaming
and Streaming.Prelude.
The principal module, Streaming.Prelude, exports an elementary streaming prelude focused on
a simple "source" or "producer" type, namely Stream (Of a) m r.
This is a sort of effectful version of
([a],r) in which successive elements of type a arise from some sort of monadic
action before the succession ends with a value of type r.
Everything in the library is organized to make
programming with this type as simple as possible,
by the simple expedient of making it as close to Prelude
and Data.List as possible. Thus for example
the trivial program
sums the first three valid integers from user input. Similarly,
upper-cases the first two lines from stdin as they arise,
and sends them to stdout. And so on,
with filtering, mapping, breaking, chunking, zipping, unzipping, replicating
and so forth:
we program with streams of Ints or Strings directly as
if they constituted something like a list. That's because streams really do constitute something
like a list, and the associated operations can mostly have the same names.
(A few, like reverse, don't stream and thus disappear;
others like unzip are here given properly streaming formulation for the first time.)
And we everywhere
oppose "extracting a pure list from IO",
which is the origin of typical Haskell memory catastrophes.
Basically any case where you are
tempted to use mapM, replicateM, traverse or sequence
with Haskell lists, you would do better to use something like
Stream (Of a) m r. The type signatures are a little fancier, but
the programs themselves are mostly the same. In fact, they are mostly simpler. Thus,
consider the trivial demo program mentioned in
this SO question
The new user notices that this exhausts memory, and worries about the efficiency of Haskell IORefs.
But of course it exhausts memory! Look what it says!
The problem is immediately cured by writing
which really does what the other program was meant to do,
uses no more memory than hello-world, and is simpler anyway, since it
doesn't involve the detour of "extracting a list from IO". Almost
every use of list mapM, replicateM, traverse and sequence produces
this problem on a smaller scale. People get used to it, as if it were
characteristic of Haskell programs to use a lot of memory. But in truth
"extracting a list or sequence from IO" is mostly just bad practice pure and simple.
Of course, mapM, replicateM, traverse and sequence make sense for lists,
under certain conditions! But unsafePerformIO also makes sense under
certain conditions.
The Streaming module exports the general type,
Stream f m r, which can be used to stream successive distinct
steps characterized by any
functor f, though we are mostly interested in organizing computations
of the form Stream (Of a) m r. The streaming-IO libraries have
various devices for dealing
with effectful variants of [a] or ([a],r) in which the emergence of
successive elements somehow depends on IO. But it is only with
the general type Stream f m r, or some equivalent,
that one can envisage (for example) the connected streaming of their
sorts of stream - as one makes lists of lists in the Haskell
Prelude and Data.List. One needs some such type if we are
to express properly streaming equivalents of e.g.
to mention a few obviously desirable operations.
(This is explained more elaborately in the readme below.)
One could of course throw something
like the present Stream type on top of a prior stream concept: this is how pipes and
pipes-group (which are very much our model here) use FreeT.
But once one grasps the iterable stream concept needed to express
those functions then one will also see that,
with it, one is already in possession of a complete
elementary streaming library - since one possesses Stream ((,) a) m r
or equivalently Stream (Of a) m r. This
is the type of a 'generator' or 'producer' or 'source' or whatever
you call an effectful stream of items.
The present Streaming.Prelude is thus the simplest streaming library that can replicate anything like the API of the Prelude and Data.List.
The emphasis of the library is on interoperation; for
the rest its advantages are: extreme simplicity, re-use of
intuitions the user has gathered from mastery of Prelude and
Data.List, and a total and systematic rejection of type synonyms.
The two conceptual pre-requisites are some
comprehension of monad transformers and some familiarity
with 'rank 2 types'. It is hoped that experimentation with this
simple material, starting with the ghci examples in Streaming.Prelude,
will give people who are new to these concepts some
intuition about their importance. The most fundamental purpose of the
library is to express elementary streaming ideas without reliance on
a complex framework, but in a way that integrates transparently with
the rest of Haskell, using ideas - e.g. rank 2 types, which are here
implicit or explicit in most mapping - that the user can carry elsewhere,
rather than chaining her understanding to the curiosities of
a so-called streaming IO framework (as necessary as that is for certain purposes.)
See the
readme
below for further explanation, including the examples linked there.
Elementary usage can be divined from the ghci examples in
Streaming.Prelude and perhaps from this rough beginning of a
tutorial.
Note also the
streaming bytestring
and
streaming utils
packages. Questions about usage can be put
raised on StackOverflow with the tag [haskell-streaming],
or as an issue on Github, or on the
pipes list
(the package understands itself as part of the pipes 'ecosystem'.)
The simplest form of interoperation with
pipes
is accomplished with this isomorphism:
Interoperation with
io-streams
is thus:
With
conduit
one might use, e.g.:
These conversions should never be more expensive than a single >-> or =$=.
The simplest interoperation with regular Haskell lists is provided by, say
The latter of course accumulates the whole list in memory, and is mostly what we are trying
to avoid. Every use of Prelude.mapM f should be reconceived as using the
composition Streaming.toList_ . Streaming.mapM f . Streaming.each with a view to
considering whether the accumulation required by Streaming.toList_ is really necessary.
Here are the results of some
microbenchmarks
based on the
benchmarks
included in the machines package:
41 versions
Latest release: 10 months ago
17 dependent packages
45,137 downloads total
View more package details: https://packages.ecosyste.ms/registries/hackage.haskell.org/packages/streaming
View more repository details: https://repos.ecosyste.ms/hosts/GitHub/repositories/haskell-streaming%2Fstreaming
Dependent Repos 129
darrellcbrown/iohk
- * marlowe/marlowe.cabal
- * playground-common/playground-common.cabal
Size: 107 MB - Last synced: about 1 year ago - Pushed: over 1 year ago
mattborghi/plutus Fork of IntersectMBO/plutus
The Plutus language implementation and tools- * freer-extras/freer-extras.cabal
- * playground-common/playground-common.cabal
Size: 90 MB - Last synced: 21 days ago - Pushed: about 1 year ago
carymrobbins/intellij-haskforce
Haskell plugin for IntelliJ IDEA- * tests/gold/cabal/parser/example00001.cabal
Size: 31.8 MB - Last synced: 27 days ago - Pushed: almost 2 years ago
natal-chart/laboratorium
Astrological data crunching- * laboratorium.cabal
Size: 813 KB - Last synced: about 1 year ago - Pushed: about 2 years ago
haskell-streaming/streaming-postgresql-simple
Stream postgresql-query results using the streaming library- >=0.1 && <0.3 streaming-postgresql-simple.cabal
Size: 33.2 KB - Last synced: about 2 months ago - Pushed: 2 months ago
pbogdan/nvs
Experimental nixpkgs vulnerability scanner.- >=0.1.4 nvs.cabal
Size: 657 KB - Last synced: about 1 year ago - Pushed: about 1 year ago
taktoa/eqsat
A language-generic implementation of equality saturation in Haskell- ==0.2.* eqsat.cabal
- ==0.2.* eqsat.cabal
Size: 451 KB - Last synced: 7 months ago - Pushed: over 5 years ago
mkohlhaas/Haskell-in-Depth
- >=0.2.2 && <0.4 ch14/ch14.cabal
Size: 28.1 MB - Last synced: about 1 year ago - Pushed: over 1 year ago
ivan-m/testbench
Create unit tests and benchmarks at the same time- ==0.2.* testbench.cabal
Size: 115 KB - Last synced: about 1 year ago - Pushed: about 5 years ago
signed/learning-haskell
- 0.1.4.5 cabal.config
Size: 83 KB - Last synced: about 1 month ago - Pushed: about 6 years ago
ekmett/machines
Networks of composable stream transducers- >=0.1.4 && <0.3 machines.cabal
Size: 541 KB - Last synced: 3 days ago - Pushed: 7 months ago
DataHaskell/dh-core
Functional data science- * datasets/datasets.cabal
- * datasets/datasets.cabal
Size: 1.18 MB - Last synced: 16 days ago - Pushed: over 2 years ago
YoEight/eventstore đŚ
EventStore Haskell TCP Client- * eventstore.cabal
- * eventstore.cabal
Size: 1.05 MB - Last synced: about 1 year ago - Pushed: over 2 years ago
composewell/streamly-examples
Examples for Streamly- >=0.2.3.0 && <0.3 streamly-examples.cabal
Size: 185 KB - Last synced: 8 days ago - Pushed: 9 days ago
isovector/marlo
a search engine for humans- * marlo.cabal
- * marlo.cabal
Size: 1.17 MB - Last synced: 10 days ago - Pushed: over 1 year ago
IntersectMBO/plutus-apps
The Plutus application platform- * playground-common/playground-common.cabal
Size: 123 MB - Last synced: 9 days ago - Pushed: 9 days ago
haskell-streaming/streaming-utils
experimental http, attoparsec and pipes material for `streaming` and `streaming-bytestring`- ==0.2.* streaming-utils.cabal
Size: 84 KB - Last synced: 16 days ago - Pushed: 5 months ago
platonic/shpadoinkle
A Functional UI programming paradigm- * examples/Shpadoinkle-examples.cabal
Last synced: over 1 year ago
ocharles/prometheus-effect
Yet another Haskell Prometheus client- * prometheus-effect.cabal
Size: 44.9 KB - Last synced: 15 days ago - Pushed: over 6 years ago
diffusionkinetics/open
DiffusionKinetics open-source monorepo- * beetle/beetle.cabal
Size: 955 KB - Last synced: 10 days ago - Pushed: over 1 year ago
plow-technologies/servant-streaming
Support for servant requests and responses via the 'streaming' library- >=0.1 && <0.3 servant-streaming-client/servant-streaming-client.cabal
- >=0.1 && <0.3 servant-streaming-client/servant-streaming-client.cabal
- >=0.1 && <0.3 servant-streaming-server/servant-streaming-server.cabal
- >=0.1 && <0.3 servant-streaming-server/servant-streaming-server.cabal
Size: 65.4 KB - Last synced: 21 days ago - Pushed: about 5 years ago
haskell-hvr/streaming-lzma
- ==0.2.* streaming-lzma.cabal
- * streaming-lzma.cabal
Size: 3.91 KB - Last synced: about 2 months ago - Pushed: 3 months ago
haskell-hvr/streaming-brotli
- ==0.2.* streaming-brotli.cabal
- * streaming-brotli.cabal
Size: 3.91 KB - Last synced: about 2 months ago - Pushed: about 5 years ago
GregorySchwartz/too-many-cells
Cluster single cells and analyze cell clade relationships with colorful visualizations.- * too-many-cells.cabal
Size: 22.3 MB - Last synced: 16 days ago - Pushed: 5 months ago
etorreborre/producer-hs
Simple streaming library for Haskell- 0.1.4.5 cabal.config
Size: 39.1 KB - Last synced: 10 days ago - Pushed: over 6 years ago
haskell-streaming/streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions- * streaming.cabal
Size: 597 KB - Last synced: 16 days ago - Pushed: 3 months ago
haskell-streaming/streaming-binary
Incremental serialization and deserialization of Haskell values.- >=0.1.4 streaming-binary.cabal
- * streaming-binary.cabal
Size: 10.7 KB - Last synced: 16 days ago - Pushed: over 6 years ago
dredozubov/sax-parser
Monadic streaming XML parser- * sax.cabal
Size: 23.4 KB - Last synced: 17 days ago - Pushed: almost 5 years ago
google/haskell-indexer
Emits code crossreference data for Haskell sources.- ==0.1.4.5 wrappers/stack-docker/everything/everything.cabal
Size: 447 KB - Last synced: 3 days ago - Pushed: almost 4 years ago
kadena-io/chainweb-node
- >=0.2 chainweb.cabal
- >=0.2.2 chainweb.cabal
- >=0.2.2 chainweb.cabal
Last synced: 11 months ago
querl.dox/linux/alpine_linux/aports
- 0.2.3.1 testing/darcs/cabal.config
- 0.2.3.1 testing/stack/cabal.config
Last synced: 11 months ago
seagreen/hermetic
Strategy game in Haskell (PRs: :x:)- * json-relay/json-relay.cabal
- * json-relay/json-relay.cabal
Size: 139 KB - Last synced: about 1 year ago - Pushed: over 4 years ago
artemwright/Plutus.
- * marlowe/marlowe.cabal
- * playground-common/playground-common.cabal
Size: 64.8 MB - Last synced: 12 months ago - Pushed: about 3 years ago
tbenne10/plutus
This is a CLONE of Cardano's Plutus platform - this was to add our VendorPassthrough contract while keeping the project hidden for a little bit (hence no fork)- * freer-extras/freer-extras.cabal
- * playground-common/playground-common.cabal
Size: 94.9 MB - Last synced: about 1 year ago - Pushed: about 1 year ago
dcSpark/plutus-voting-dapp
A smart contract which enables users to vote for spending funds from a treasury UTXO.- * voting-dapp.cabal
Size: 30.3 KB - Last synced: 26 days ago - Pushed: about 2 years ago
jungmyeong96/PlutusPioneer3rdCohort
Plutus ě¤ë§í¸ęłě˝ě¸ě´ě ě´í´- * plutus-apps/playground-common/playground-common.cabal
Size: 15 MB - Last synced: about 1 year ago - Pushed: over 1 year ago
hasktorch/hasktorch
Tensors and neural networks in Haskell- * experimental/dataloader-cifar10/dataloader-cifar10.cabal
Size: 13.3 MB - Last synced: 19 days ago - Pushed: 19 days ago
fosskers/playground
Testing various things in various languages. Meant as a reference.- >=0.1 && <0.3 haskell/attoparsec/pg-atto.cabal
- >=0.1 && <0.3 haskell/streaming/pg-streaming.cabal
Size: 572 KB - Last synced: 10 days ago - Pushed: over 4 years ago
composewell/streaming-benchmarks
Benchmarks to compare Haskell streaming library performance- >=0.1.4 && <0.3 streaming-benchmarks.cabal
Size: 1.26 MB - Last synced: about 2 months ago - Pushed: about 1 year ago
haskell-streaming/streaming-conduit
Bidirectional support between the streaming and conduit libraries- >=0.1.3.0 && <0.3 streaming-conduit.cabal
- * streaming-conduit.cabal
Size: 18.6 KB - Last synced: about 2 months ago - Pushed: 8 months ago
chris-martin/choose
- * choose/choose.cabal
- * choose/choose.cabal
- * choose-exe/choose-exe.cabal
Size: 48.8 KB - Last synced: about 1 year ago - Pushed: over 5 years ago
pierric/fei-dataiter
Data Loading API of mxnet in Haskell- >=0.1.4.5 fei-dataiter.cabal
- >=0.1.4.5 fei-dataiter.cabal
Size: 55.7 KB - Last synced: about 2 months ago - Pushed: over 4 years ago
codejones-hub/plutus
- * freer-extras/freer-extras.cabal
- * marlowe/marlowe.cabal
- * playground-common/playground-common.cabal
Size: 71.7 MB - Last synced: about 1 year ago - Pushed: over 1 year ago
tweag/kernmantle
Braiding extensible effects together in a pipeline/workflow of tasks- * streams/kernmantle-streams.cabal
Size: 393 KB - Last synced: 9 months ago - Pushed: 9 months ago
haskell-streaming/streaming-bytestring
effectful sequences of bytes; an alternative no-lazy-io implementation of Data.ByteString.Lazy- >=0.1.4.0 && <0.3 streaming-bytestring.cabal
- * streaming-bytestring.cabal
Size: 619 KB - Last synced: 10 days ago - Pushed: 3 months ago
Belinsky-L-V/HABQT
Hierarchical adaptive Bayesian quantum tomography for quantum bits- >=0.2.1 && <0.3 HABQT.cabal
- >=0.2.1 && <0.3 HABQT.cabal
Size: 28.3 KB - Last synced: 9 months ago - Pushed: almost 6 years ago
ewilden/haskell-liveview
- * liveview-simple.cabal
- * liveview-simple.cabal
Size: 914 KB - Last synced: 9 months ago - Pushed: about 2 years ago
choener/Forestry
Science and craft of forests- >=0.1 Forestry.cabal
Size: 199 KB - Last synced: 5 months ago - Pushed: over 6 years ago
Engincs/aports Fork of alpinelinux/aports
[MIRROR] Alpine packages build scripts- 0.2.3.1 testing/darcs/cabal.config
- 0.2.3.1 testing/stack/cabal.config
Size: 352 MB - Last synced: about 15 hours ago - Pushed: 1 day ago
michaelt/streaming-bytestring
effectful sequences of bytes; an alternative no-lazy-io implementation of Data.ByteString.Lazy- >=0.1.4.0 && <0.1.4.8 streaming-bytestring.cabal
- * streaming-bytestring.cabal
Size: 298 KB - Last synced: about 1 year ago - Pushed: over 6 years ago
kindaro/cabal-prettify
- * test-data/other/json-relay.cabal
- * test-data/other/json-relay.cabal
Size: 356 KB - Last synced: about 1 month ago - Pushed: about 1 month ago
rssh/plutus-apps Fork of input-output-hk/plutus-apps
The Plutus application platform- * playground-common/playground-common.cabal
Size: 111 MB - Last synced: about 1 year ago - Pushed: over 1 year ago
akimichi/functionaljs
ăé˘ć°ĺăăă°ăŠăăłă°ăŽĺşç¤ăăľăłăăŤăłăźă- 0.1.4.0 cabal.config
Size: 7 MB - Last synced: 18 days ago - Pushed: 19 days ago
limaner2002/MyMixer
- * spotify.cabal
Size: 130 KB - Last synced: about 1 year ago - Pushed: over 5 years ago
global-access-public/streaming-hasql
- * streaming-hasql.cabal
- * streaming-hasql.cabal
Last synced: 4 months ago
kadena-io/chainweb-mining-client
A mining client for Kadena- >=0.2 chainweb-mining-client.cabal
Size: 208 KB - Last synced: 25 days ago - Pushed: 6 months ago
kadena-io/chainweb-miner đŚ
Official mining software for the Kadena Public Blockchain.- >=0.2 chainweb-miner.cabal
Size: 157 KB - Last synced: 9 months ago - Pushed: over 1 year ago
global-access-public/disk-buffering
various caching generic operations for serializables- * disk-buffering.cabal
- * disk-buffering.cabal
Last synced: 4 months ago
global-access-public/streaming-sync
computes synchronization operations out of an old and a fresh stream- * streaming-sync.cabal
Last synced: 4 months ago