私は UI を使用してアプリケーションを作成しており、 aStateTおよび a ReaderToverIOにあるコードを実行する必要があります。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コードは一時的なものです。