努力学习编写与Gtk2Hs我得到弥合事件驱动Gtk2HS和我的模型的持久状态之间的差距困难应用。 因此,为了简化,可以说,我有这个简单的应用程序
module Main where
import Graphics.UI.Gtk
import Control.Monad.State
main = do
initGUI
window <- windowNew
button <- buttonNew
set button [buttonLabel := "Press me"]
containerAdd window button
-- Events
onDestroy window mainQuit
onClicked button (putStrLn ---PUT MEANINGFUL CODE HERE---)
widgetShowAll window
mainGUI
和我的应用程序的状态是多少次的按钮被按下。 眼看其他职位喜欢这样 ,他们依靠MVars或IORefs这似乎并不令人满意给我,因为在将来也许我会想重构代码以使国家生活在自己的上下文。
我认为,解决方案应使用阶跃函数一样使用状态单子:
State $ \s -> ((),s+1)
但我不知道的含义,如何做到这一点在上面的代码或即使单子是我的问题的解决方案。