streaming: A free monad transformer optimized for streaming applications.
Stream
can be used wherever FreeT
is used. The compiler's
standard range of optimizations work better for operations
written in terms of Stream
. See the examples in Streaming.Prelude
for a sense of how simple the library is to use and think about.
Streaming.Prelude
closely follows
Pipes.Prelude
, but cleverly omits the pipes. It is focused
on employment with base functors which generate
effectful sequences. These appear elsewhere under titles like
pipes: Producer a m r, Producer a m (Producer a m r), FreeT (Producer a m) m r io-streams: InputStream a, Generator a r conduit: Source m a, ConduitM () o m r
and the like.
Interoperation with pipes is accomplished with this isomorphism:
Pipes.unfoldr Streaming.next :: Stream (Of a) m r -> Producer a m r Streaming.unfoldr Pipes.next :: Producer a m r -> Stream (Of a) m r
(If you don't have pipes-HEAD
, inline the definition of unfoldr.)
Interoperation with io-streams is thus:
Streaming.reread IOStreams.read :: InputStream a -> Stream (Of a) IO () IOStreams.unfoldM Streaming.uncons :: Stream (Of a) IO () -> IO (InputStream a)
The separate Generator a r
type in io-streams
is intended to permit
construction of an InputStream
with more possibilities
(such as the yield
statement). This purpose can as well be met with
Stream (Of a) m r
, which may be friendlier to the compiler.
A simple exit to conduit would be, e.g.:
Conduit.unfoldM Streaming.uncons :: Stream (Of a) m () -> Source m a
These conversions should never be more expensive than a single >->
or =$=
.
Downloads
- streaming-0.1.0.7.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 0.1.0.0, 0.1.0.1, 0.1.0.3, 0.1.0.4, 0.1.0.5, 0.1.0.6, 0.1.0.7, 0.1.0.8, 0.1.0.9, 0.1.0.10, 0.1.0.11, 0.1.0.12, 0.1.0.13, 0.1.0.14, 0.1.0.15, 0.1.0.16, 0.1.0.17, 0.1.0.18, 0.1.0.19, 0.1.0.20, 0.1.1.0, 0.1.1.1, 0.1.2.0, 0.1.2.2, 0.1.3.0, 0.1.3.1, 0.1.3.2, 0.1.3.3, 0.1.3.4, 0.1.4.0, 0.1.4.1, 0.1.4.2, 0.1.4.3, 0.1.4.4, 0.1.4.5, 0.2.0.0, 0.2.1.0, 0.2.2.0, 0.2.3.0, 0.2.3.1, 0.2.4.0 |
---|---|
Dependencies | base (>=4.8 && <4.9), mmorph (>=1.0 && <1.2), mtl (>=2.1 && <2.3), transformers (>=0.3 && <0.5) [details] |
License | BSD-3-Clause |
Author | michaelt |
Maintainer | what_is_it_to_do_anything@yahoo.com |
Revised | Revision 1 made by HerbertValerioRiedel at 2018-08-29T08:15:11Z |
Category | Data, Pipes |
Home page | https://github.com/michaelt/streaming |
Bug tracker | https://github.com/michaelt/streaming/issues |
Source repo | head: git clone https://github.com/michaelt/streaming |
Uploaded | by MichaelThompson at 2015-08-22T16:13:59Z |
Distributions | LTSHaskell:0.2.4.0, NixOS:0.2.4.0, Stackage:0.2.4.0 |
Reverse Dependencies | 80 direct, 91 indirect [details] |
Downloads | 48509 total (5 in the last 30 days) |
Rating | 2.5 (votes: 6) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |