nptools-0.1: iter-lines.hs
{-# LANGUAGE ScopedTypeVariables #-}
import Control.Exception
import System.Environment (getArgs)
import System.Exit (ExitCode)
import System.IO
import qualified System.Process as P
import qualified Data.ByteString.Lazy.Char8 as L8
import qualified Data.ByteString.Lazy as L
main :: IO ()
main = do
cmd:args <- getArgs
mapM_ (processWithStdin (P.proc cmd args) . flip L8.snoc '\n') . L8.lines =<< L.getContents
processWithStdin :: P.CreateProcess -> L.ByteString -> IO ExitCode
processWithStdin process input = do
(Just stdinHdl, _, _, pHdl) <-
P.createProcess process { P.std_in = P.CreatePipe }
handle (\(_ :: IOException) -> return ()) $ do
L.hPut stdinHdl input
hClose stdinHdl
P.waitForProcess pHdl