State和WX gui共存

时间:2010-03-11 09:29:49

标签: haskell monads wxhaskell state-monad

通常的wxHaskell程序看起来像

main = do 
        run gui

gui = do 
    .... 
    ....

gui必须有IO a类型,运行类型为IO a -> IO ()run中也有一些初始化例程。

我想做以下事情:

 data AppGlobals = AG { ... some data  ... }
 type MApp a = StateT AppGlobals IO a

但在这种情况下,gui必须有gui :: MApp AppGlobals类型。由于它的类型,不可能使用通常的IO monad语法,我的意思是每次执行IO操作时都要使用liftIO

在wxHaskell中使用State monad是否有任何方便的可能性?将状态手动传递给每个事件处理程序并不是很方便。

2 个答案:

答案 0 :(得分:0)

我读过和写过的wxHaskell程序只是将状态推入变量 http://wxhaskell.sourceforge.net/doc/Graphics-UI-WX-Variable.html

以下是一个很好的概述:   http://legacy.cs.uu.nl/daan/download/papers/wxhaskell.pdf

他们使用开始而不是跑步。

答案 1 :(得分:0)

理论上这是可能的,但我发现它在实践中很麻烦,就像你做的那样。我自己的wxHaskell代码通常看起来像我在引用的博客文章中描述的那样:

http://wewantarock.wordpress.com/2010/01/11/custom-controls-in-wxhaskell-part-3/

你可以像ja建议的那样使用wxHaskell变量用于相同的目的,尽管我更喜欢我在博客中使用的更明确的样式。