私はこのようなことをしたいと思います:
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"
もちろん、cidがまだ割り当てられていないコードブロック内でcidを使用しようとしているため、これはそのままでは機能しません。
アイデアは、イベントを受信すると、それ自体を登録解除し、同じことを行う別のイベントリスナーを登録するイベントリスナーを登録することです。