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 followsPipes.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 withStream (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