質問

通常の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モナド構文を使用することは不可能になります。私は使用することを意味します liftIO IOアクションを実行するたびに。

WxhaskellでState Monadを使用する説得力のある可能性はありますか?各イベントハンドラーに手動で状態を渡すことはあまり説得力がありません。

役に立ちましたか?

解決

私が読んで書いた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-3/

JAが提案したように、WXHaskell変数を同じ目的で使用できますが、ブログで使用したより明確なスタイルを好みます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top