John Goerzen wrote:
On 2007-03-06, Simon Marlow <[EMAIL PROTECTED]> wrote:
John Goerzen wrote:
possible to create a pipe going directly from program A to program B.
You certainly can pipe directly from one process to another:

That only works for 2 processes.  What if I have 4 processes, and want
to pipe from one to the next, all along, as in

ls -l /tmp | tr a-zA-Z | sort | md5sum

to give a contrived example

Before I answer the question, if you don't mind I'll quote from my own message:

> However, I'll accept that there are certain arrangements of pipes that
> aren't possible, or will construct too many pipes and you'll need extra
> threads to connect them together, because the only way to create pipes
> is with runInteractive* and that creates pipes for all of
> stdin/stdout/stderr.
>
> Of course we're open to suggestions for improving System.Process.
> Perhaps there should be a version that lets you specify a Handle *or*
> create a pipe, for each standard file descriptor.

So ideally we'd have a version of runInteractiveProcess that didn't create all three pipes, and then it would be easy to program your example. Unfortunately we don't have such a function, but it's still possible to code up your example - you just end up with too many pipes and you'd need some Haskell threads to act as dummy "processes" between the extra pipe ends. I'm aware this isn't a satisfactory solution, for various reasons.

Cheers,
        Simon

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to