0
我想在我的GUI應用程序中保留一些狀態,以便我可以從用戶輸入構建一個值列表。但我無法理解國家單子所以...
下面是一些測試代碼來說明我想要的東西(很明顯它不會編譯,甚至還沒有tryed於):State monad和gtk2hs
-- // --
main :: IO()
main = do
initGUI
build <- builderNew
builderAddFromFile build "test.glade"
mainWindow <- builderGetObject build castToWindow "mainWindow"
mainWindow `onDestroy` mainQuit
mQuit <- builderGetObject build castToButton "quit"
mQuit `onClicked` mainQuit
entry <- builderGetObject build castToEntry "entry"
mUpdate <- builderGetObject build castToButton "update"
mUpdate `onClicked` do
txt <- entryGetText entry
runState (addToList txt) []
return()
widgetShowAll mainWindow
mainGUI
-- // --
addToList :: String -> State [String]()
addToList ent = get >>= \x -> put $ x ++ [ent]
反正我認爲我應該使用StateT而不是State,但它在我腦海中完全混亂(閱讀了很多Tutos ...)。 即使它工作,它也不會很好,因爲我在每個循環中給出了初始狀態[]。 問題是如何編寫函數addToList,以便每次按下更新按鈕時,用戶輸入都會添加到某個狀態(之前輸入的列表)?
我有一個問題,我在哪裏定義我的初始狀態(這裏是[]的listWas值)? – Sarfraz
@Sarfraz更新 – wit
儘管你的建議已經停滯不前,但對於gtk2hs應用來說,使用Control.Concurent.MVar模塊可能會更好。 – Sarfraz