我正在尝试解决 Haskell 为相同参数提供不同输出的问题。有人已经建议这可能是与线程相关的问题。
我设法重写了一个简单的函数来使用原子版本,但更复杂的函数我需要帮助。
这是我的代码:
timeFun globalModel canvas = modifyIORef' globalModel (updateGlobalModel Tick) >> Gtk.widgetQueueDraw canvas >> return True
我的发现
按照建议,我尝试使用 do 表示法重写函数:
timerFun g c = do
i <- readIORef g
writeIORef g (updateGlobalModel Tick i)
Gtk.widgetQueueDraw c
return True
使用原子代码和 do 表示法的版本:
timerFun g c = do
atomicModifyIORef' g $ \p -> do
(updateGlobalModel Tick p ,())
Gtk.widgetQueueDraw c
return True