[Haskell-cafe] ANNOUNCE: pipes-core 0.1.0
Ben Franksen
ben.franksen at online.de
Mon Apr 16 23:13:11 CEST 2012
Paolo Capriotti wrote:
> I'm pleased to announce the release of version 0.1.0 of pipes-core, a
> library for efficient, safe and compositional IO, similar in scope to
> iteratee and conduits.
>
> http://hackage.haskell.org/package/pipes-core
I like your pipes package. This is very similar to what Mario Blažević wrote
about his Coroutines in the Monad.Reader (can't remember which issue; great
article, BTW, many thanks Mario for making me understand the iteratee
business (and also generators) for the first time). Your pipes-core looks
even simpler to use, maybe due to avoiding to make a type distinction
between consumer/producer/pipe (except the natural one i.e. through the
input/output types), even though the parameterization by a functor (as in
Monad.Coroutine) has its own beauty.
Two issues:
(1) What is the reason for the asymmetry in
type Producer b m = Pipe () b m
type Consumer a m = Pipe a Void m
i.e. why does Producer use () for the input? I would expect it to use Void,
like Consumer does for its output. Calling await in a Producer resulting in
an immediate 'return ()' as you say is allowed (in the tutorial) strikes me
as not very useful.
If the idea is simply to flag nonsense like
consumer >+> producer
with a type error, then it might be a better idea to introduce two different
Void types:
data NoOutput
data NoInput
type Producer b m = Pipe NoInput b m
type Consumer a m = Pipe a NoOutput m
type Pipeline m = Pipe NoInput NoOutput m
(and isn't this nicely self-explaining?)
(2) The $$ operator is poorly named. I would intuitively expect an operator
that looks so similar to the standard $ to have the same direction of data
flow (i.e. right to left, like function application and composition) but
your is left to right. You could use e.g. >$> instead, which has the
additional advantage of allowing a symmetric variant for the other direction
i.e. <$<.
Cheers
Ben
More information about the Haskell-Cafe
mailing list