通常の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
。このタイプのため、通常のIOモナド構文を使用できなくなります。つまり、liftIO
IOアクションを実行するたびに使用する必要があります。
wxHaskellでStateモナドを使用する便利な可能性はありますか?状態を各イベントハンドラーに手動で渡すのはあまり便利ではありません。