Как работать с состоянием приложения в Gtk2Hs

Пытаясь научиться писать приложения с помощью 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)

но я не уверен в последствиях, как это сделать в приведенном выше коде или даже в том, является ли эта монада правильным решением моей проблемы.

9
задан Community 23 May 2017 в 12:32
поделиться