@hackage streaming0.1.0.5
A free monad transformer optimized for streaming applications.
Installation
Dependencies (5)
Dependents (97)
@hackage/prometheus-effect, @hackage/box, @hackage/eventsource-store-specs, @hackage/cabal-scaffold, @hackage/web-rep, @hackage/om-socket, Show all…
Stream can be used wherever FreeT is used. The compiler
is better able to optimize 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: i.e., things like
Pipes.Producer
Conduit.Source
IOStreams.InputStream
IOStreams.Generator
Interoperation with
pipes
is accomplished with this isomorphism which
uses Pipes.Prelude.unfoldr from HEAD:
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)
for example. 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 =$=.