обычная программа 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
каждый раз, когда я выполняю действия ввода-вывода.
Есть ли какая-нибудь удобная возможность использовать Государственную монаду в wxHaskell? Передавать состояние каждому обработчику событий не очень удобно.