Я хотел бы сделать что-то вроде этого:
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 не назначенпока что.
Идея состоит в том, чтобы зарегистрировать прослушиватель событий, который при получении события отменяет регистрацию и регистрирует другого прослушивателя событий, который будет делать то же самое, туда и обратно.