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モナド構文を使用することは不可能になります。私は使用することを意味します 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変数を同じ目的で使用できますが、ブログで使用したより明確なスタイルを好みます。