通常的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语法,我的意思是我使用 liftIO 每次我执行IO行动。

在WXHASKELL中使用国家单元有任何令人信服的可能性吗?手动将状态传递给每个事件处理程序不是很有说服力。

有帮助吗?

解决方案

我阅读和编写的WXHASKELL程序将状态推到了变量中。
http://wxhaskell.sourceforge.net/doc/graphics-ui-wx-variable.html

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

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

其他提示

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

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

如JA所建议,您可以使用WXHASKELL变量出于相同的目的,尽管我更喜欢博客中使用的更明确的样式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top