Пытаясь научиться писать приложения с помощью Gtk2H, я сталкиваюсь с трудностями при преодолении разрыва между 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 с помощью ступенчатой функции, например:
State $ \s -> ((),s+1)
но я не уверен в последствиях, как это сделать в приведенном выше коде или даже в том, является ли эта монада правильным решением моей проблемы.