外部サブプロセスを対話的に実行するプログラムを作成していますが、出力ハンドルの内容が利用可能になり次第 stdout に出力されるようにする必要があります。私はこのようなことを試しました:
main = do processInfo <- createProcess (proc "ghci" []){std_out = CreatePipe,
std_in = CreatePipe }
case processInfo of
(Just hIn, Just hOut, _, _) -> do mainloop hIn hOut
hClose hIn
hClose hOut
_ -> do error "Unable to start process"
mainloop :: Handle -> Handle -> IO ()
mainloop inh outh =
do ineof <- hIsEOF outh
if ineof
then return ()
else do inpStr <- hGetLine outh
putStrLn inpStr
mainloop inh outh
しかし、これは出力を行ごとにしか認識しないため機能しません。そのため、改行で終了していないプロセス出力ハンドルの出力は表示されません。hGetContents で同じことを試しましたが、同じ結果が得られます。System.Process と System.IO の両方のドキュメントを読みましたが、決定的なものは何も見つかりませんでした。