On Thu, 21 Sep 2006, George Brewster wrote: ... > Yup, I'm on linux. My goal is to have a function which gives me a lazy > string which is the output of a shell command, and takes a string as > input. In particular, I'd like the shell command to behave lazily (read > only as much input as is needed, and write only as much output as > needed), so things like this work (should terminate and print a few > lines of "hi"): > > main = sh "yes hi" "there" >>= sh "head" >>= putStrLn
Good luck! > I tried your suggestion out (remove forkIO), and when I do that, this > example returns but doesn't print anything. For me, it hangs - since I left the wait in. If I omit the wait, it's "broken pipe", I think because we're trying to write data to "head" after it exits. Donn Cave, [EMAIL PROTECTED] > sh :: String -> String -> IO String > sh cmd = \input -> > do (stdin, stdout, _, pid) <- runInteractiveCommand cmd > forkIO $ hPutStr stdin input >> hClose stdin > forkIO $ waitForProcess pid >> return () > hGetContents stdout _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe