The latest version of streaming is 0.2.4.0-0.

streaming

Version 0.1.0.6 revision 1 uploaded by HerbertValerioRiedel.

Package meta

Synopsis
A free monad transformer optimized for streaming applications.
Description

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 a base functors which generate effectful sequences: e.g.

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 purposes of the separate Generator a r type can as well be met with Stream (Of a) m r, which admits more complex manipulations and should be somewhat 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 =$=.

Author
michaelt
Bug reports
https://github.com/michaelt/streaming/issues
Category
Data, Pipes
Copyright
n/a
Homepage
https://github.com/michaelt/streaming
Maintainer
what_is_it_to_do_anything@yahoo.com
Package URL
n/a
Stability
Experimental

Components