2
我正在與UI應用程序,我需要運行的代碼是在StateT
和ReaderT
在IO
,我使用Graphics.UI.Gtk
的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
代碼是暫時的。