给出以下代码:
module Main where
import Control.Concurrent
main :: IO ()
main = forkIO errorPrinter >> threadDelay 1000000 >> print "Finished"
errorPrinter = error "You can't see me!"
我希望,运行此代码后,我会看到:
"You can't see me"
"Finished!"
打印到控制台.但是,“你看不到我”从未打印过.
我意识到在生产代码中使用错误不是一个好主意,但我在开发中使用它,我发现控制台上没有打印错误 – 即使是依赖项引发的错误.
我相信这个问题有一个简单的解决方案.我不能成为第一个遇到这个问题的人,但我无法在任何地方找到答案.
任何帮助将非常感激!
最佳答案 我无法重现你的问题;对我来说,它打印出“你看不到我!”:
% runhaskell test.hs
test.hs: You can't see me!
CallStack (from HasCallStack):
error, called at test.hs:8:16 in main:Main
"Finished"
我看到类似的行为可以追溯到GHC 7.6(我躺在最古老的GHC);在过去二十年左右的时间里,这种行为发生了重大变化,我会感到有些惊讶.
无论如何,我建议切换到打印你想要打印的信息:
import System.IO
errorPrinter = hPutStrLn stderr "You can't see me!"
说出你的意思,以及所有这一切.