超时与ghc 7.8.3

时间:2014-08-25 14:32:47

标签: haskell ghc

我目前正在尝试使用新的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.

这个模块被隐藏的原因是什么,以便不能使用定时器功能?

1 个答案:

答案 0 :(得分:3)

虽然未导出类型,但这意味着您无法记下提及ThreadManager的类型签名。您仍然可以拨打registerTimeoutupdateTimeoutunregisterTimeout

示例:

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的类型不会起作用。如果您想将计时器管理器放在某些数据结构中,这有时会令人讨厌。但我想你不应该这样做。