1

通常的 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 是否有任何方便的可能性?手动将状态传递给每个事件处理程序并不是很方便。

4

2 回答 2

0

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

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

他们使用启动而不是运行。

于 2010-03-11T10:06:33.693 回答
0

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

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

您可以按照 ja 的建议使用 wxHaskell 变量来实现相同的目的,尽管我更喜欢我在博客中使用的更明确的样式。

于 2010-05-24T13:00:12.587 回答