Haskell 在gtk2hs中的事件处理程序之间切换
我想这样做:Haskell 在gtk2hs中的事件处理程序之间切换,haskell,event-handling,gtk,gtk2hs,Haskell,Event Handling,Gtk,Gtk2hs,我想这样做: handlerOn = do cid <- canvas `on` buttonPressEvent $ tryEvent do signalDisconnect cid handlerOff putStrLn "handlerOn" handlerOff = do cid <- canvas `on` buttonPressEvent $ tryEvent do signalDisconnect cid handlerOn
handlerOn = do
cid <- canvas `on` buttonPressEvent $ tryEvent do
signalDisconnect cid
handlerOff
putStrLn "handlerOn"
handlerOff = do
cid <- canvas `on` buttonPressEvent $ tryEvent do
signalDisconnect cid
handlerOn
putStrLn "handlerOff"
handlerOn=do
cidGHC支持
或者自己管理处理程序
do ...
h <- newIORef undefined
let handlerOn = do
...
writeIORef h handlerOff
handlerOff = do
...
writeIORef h handlerOn
writeIORef h handlerOn
canvas `on` buttonPressEvent $ tryEvent =<< readIORef h
做。。。
h谢谢!我正在使用第一个选项,至少对我来说,我必须添加括号,如:rec{cid…handlerOff}中所示,这样它才能工作。
handlerOff = do
mfix $ \cid -> canvas `on` buttonPressEvent $ tryEvent do
signalDisconnect cid
handlerOn
putStrLn "handlerOff"
do ...
h <- newIORef undefined
let handlerOn = do
...
writeIORef h handlerOff
handlerOff = do
...
writeIORef h handlerOn
writeIORef h handlerOn
canvas `on` buttonPressEvent $ tryEvent =<< readIORef h
do ...
ms <- newIORef False
canvas `on` buttonPressEvent $ tryEvent do
s <- readIORef ms
if s
then ...
else ...