Arrows and streaming/piping

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Baa
Reply | Threaded
Open this post in threaded view
|

Arrows and streaming/piping

Baa
Hello, Cafe!

There is a statement that Arrows can be used as streaming approach.
Arrows are very new for me, so my question may looks stupid, but would
somebody show me clean and simple example how it will look? Lets suppose
we have function `getLines` which returns `IO [String]`, a lot of lines
:) And I want to process them as I do it with streaming library (or
pipes) - with constant space.

If it's true, then I can use Arrows instead of pipes, right?


===

Best regards, Paul

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
Reply | Threaded
Open this post in threaded view
|

Re: Arrows and streaming/piping

MarLinn
Hi Paul.

> There is a statement that Arrows can be used as streaming approach.
> Arrows are very new for me, so my question may looks stupid, but would
> somebody show me clean and simple example how it will look? Lets
> suppose we have function `getLines` which returns `IO [String]`, a lot
> of lines :) And I want to process them as I do it with streaming
> library (or pipes) - with constant space.
>
> If it's true, then I can use Arrows instead of pipes, right?

No. Or rather maybe. But mostly no. Arrows are just a particular way to
write and think about code. You can structure a library to be
particularly well suited to arrows, but what a library does and how you
use it is completely orthogonal. When people say arrows are suitable for
a streaming approach, what they often mean is that thinking in terms of
arrows and thinking in terms of streams are compatible.

That means that no amount of arrows will help you stream your data. And
if you use a streaming library that's optimised for arrows, you can
forego the arrows if you want.

In fact arrows have fallen out of favour with most Haskell programmers
because (1) you can get almost all their advantages with just
Applicatives and (2) many things Arrow syntax would be great for can't
be implemented with how the Arrow hierarchy is currently structured and
desugared. For that reason I don't think any modern streaming library
will rely on arrows.

That being said, to help you with the need for streams, might I point
you to the excellent conduit-library. It's a bit complex to learn, but
their github (https://github.com/snoyberg/conduit) has a rather
impressive introduction.

Cheers,
MarLinn

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.