我目前正在尝试使用新的ghc 7.8.3编译使用ghc 7.6.3创建的模拟器,并遇到了GHC.Event的问题。
我使用的超时功能已经改变为7.8.3。对于7.8.3,现在有一个全局getSystemTimerManager
函数,它返回TimerManager
。但是TimerManager
数据类型未导出,它是隐藏包GHC.Event.TimerManager的一部分。当我尝试导入这个模块时,我得到:
Utils/Timer.hs:16:8:
Could not find module ‘GHC.Event.TimerManager’
it is a hidden module in the package ‘base’
Use -v to see a list of the files searched for.
这个模块被隐藏的原因是什么,以便不能使用定时器功能?
答案 0 :(得分:3)
虽然未导出类型,但这意味着您无法记下提及ThreadManager的类型签名。您仍然可以拨打registerTimeout
,updateTimeout
或unregisterTimeout
。
示例:
module Main where
import GHC.Event
import Control.Concurrent (threadDelay)
main = do
tm <- getSystemTimerManager
_ <- registerTimeout tm 100000 $ do
putStrLn "timeout!"
putStrLn "sleeping"
threadDelay 200000
putStrLn "wokeup"
编译并运行并打印"sleeping\ntimeout!\nwokeup"
。
尝试记下tm的类型不会起作用。如果您想将计时器管理器放在某些数据结构中,这有时会令人讨厌。但我想你不应该这样做。