Statet和WX GUI共存
-
19-09-2019 - |
题
通常的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变量出于相同的目的,尽管我更喜欢博客中使用的更明确的样式。
不隶属于 StackOverflow