通常的 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 必须有 type gui :: MApp AppGlobals
。由于它的类型,不可能使用通常的 IO monad 语法,我的意思是我liftIO
每次执行 IO 操作时都必须使用。
在 wxHaskell 中使用 State monad 是否有任何方便的可能性?手动将状态传递给每个事件处理程序并不是很方便。