1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
{-# LANGUAGE CPP #-}
{-# LANGUAGE BangPatterns #-}
module Main ( main ) where
-- base
import System.Environment
import System.IO
-- deepseq
import Control.DeepSeq
( force )
-- process
import System.Process.CommunicationHandle
( openCommunicationHandleRead
, openCommunicationHandleWrite
)
#if defined(__IO_MANAGER_WINIO__)
import GHC.IO.SubSystem ((<!>))
#endif
--------------------------------------------------------------------------------
main :: IO ()
main = do
args <- getArgs
case args of
[ chRead, chWrite ] -> do
childUsesWinIO <-
return False
#if defined(__IO_MANAGER_WINIO__)
<!> return True
#endif
putStr $ unlines
[ "cli-child {"
, " childUsesWinIO: " ++ show childUsesWinIO ]
hRead <- openCommunicationHandleRead $ read chRead
hWrite <- openCommunicationHandleWrite $ read chWrite
input <- hGetContents hRead
let !output = force $ reverse input ++ "123"
hPutStr hWrite output
putStrLn "cli-child }"
hClose hWrite
_ -> error $
unlines [ "expected two CommunicationHandle arguments, but got:"
, show args ]
|