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