考虑这个haskell代码
import GHC
import GhcMonad
main = runGhc (Just "/usr/lib/ghc") $ do
flags <- getSessionDynFlags
setSessionDynFlags flags
imps <- mapM parseImportDecl ["import Prelude"]
setContext (map IIDecl imps)
runStmt "putStrLn \"1\"" RunToCompletion
liftIO $ putStrLn "2"
使用ghc -o a.out source_file.hs -package ghc
如果从终端运行,则输出
1
2
但是,如果将stdout和stderr重定向到主进程的子进程启动,则只从stdout捕获2
。问题是runStmt "putStrLn \"1\"" RunToCompletion
做了什么?它是否启动了新的线程/进程?它写入哪个流?