обычная программа wxHaskell выглядит так
main = do
run gui
gui = do
....
....
gui должен иметь тип IO a
, run имеет тип IO a -> IO ()
, также в run
есть некоторые подпрограммы инициализации.
Я пытаюсь сделать следующее:
data AppGlobals = AG { ... some data ... }
type MApp a = StateT AppGlobals IO a
Но в этом случае gui должен иметь тип gui :: MApp AppGlobals
. Из-за его типа становится невозможным использовать обычный синтаксис монады ввода-вывода, я имею в виду, что мне приходится использовать liftIO
каждый раз, когда я выполняю действие ввода-вывода.
Есть ли удобная возможность использовать монаду State в wxHaskell? Не очень удобно передавать состояние каждому обработчику событий вручную.