packages feed

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