К сожалению, поскольку wxHaskell - это основанная на событиях структура, ответы Дона и Зака не применимы.
То, что вы должны сделать здесь, - это выделить изменчивую переменную , как вы это сделали бы в императивном языке. Для этого WxHaskell предлагает функцию variable
. Вот (неполный) пример:
gui = do
...
counter <- variable [value := 1 :: Int] -- allocate mutable variable
button <- button window [ text := "Count!"
, on command := next counter button]
where
next counter button = do
n <- get counter value -- get its value
set button [text := show n]
set counter [value := n+1] -- set its value
Обратите внимание, что wxHaskell поставляется с большим количеством примеров исходного кода . В частности, wx/ImageViewer.hs
имеет изменяемую переменную.
Однако, за исключением особых ситуаций, подобных этой, полезно избегать изменчивых переменных, таких как чума. (На самом деле, они тоже создают беспорядок в wxHaskell, просто здесь их трудно избежать.) Альтернативы включают переосмысление вашего кода, накопление параметров, использование типов формы s -> (a,s)
и монады состояний.