[Haskell-cafe] Re: ANN: HSH 1.2.0

Simon Marlow simonmarhaskell at gmail.com
Tue Mar 13 06:51:47 EDT 2007

John Goerzen wrote:
> On 2007-03-06, Simon Marlow <simonmarhaskell at gmail.com> 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.


More information about the Haskell-Cafe mailing list