我希望我的程序永远永久锁定,我的第一个想法是:

threadDelay (maxBound :: Int)

这给出了一些虚假的警告:
Prelude> import Control.Concurrent
Prelude Control.Concurrent> threadDelay 10
Prelude Control.Concurrent> threadDelay (maxBound :: Int)
<interactive>: c_poll: invalid argument (Invalid argument)
<interactive>: ioManagerWakeup: write: Bad file descriptor

我做错了还是GHC?

最佳答案

这似乎是known GHC bug,已经取得了一些进展(尽管并非所有配置都已修复)。

同时,您可以使用forever (threadDelay (2^20))或类似方法来解决此问题; 2^20应该与maxBound保持足够的距离以避免此错误,并且在系统上每秒唤醒一次应该很容易。

07-24 09:48