私は UI を使用してアプリケーションを作成しており、 aStateT
および a ReaderT
overIO
にあるコードを実行する必要があります。UI に使用Graphics.UI.Gtk
していますが、次の問題があります。
特定のボタンをクリックすると、署名を持つ関数が呼び出される必要があります
tryAttack :: Int -> ReaderT Builder (StateT BattleState IO) Bool
しかし ではGTK
、clickedOn
関数ではIO ()
引数を取ります:
onClicked :: ButtonClass b => b -> IO () -> IO (ConnectId b)
どうすればこのclickedOn
関数を「だます」ことtryAttack
ができますかIO ()
。
attackButton builder leftTR i = do
moveButton <- builderGetObject builder castToButton ("move" ++ show i)
onClicked moveButton $ do
ok <- tryAttack i
if ok
then hideAndShow builder castToTable "fight" "option"
else return ()
tryAttack :: Int -> ReaderT Builder (StateT BattleState IO) Bool
tryAttack i = return True
明らかにtryAttack
コードは一時的なものです。