Я читаю состояние кнопки (независимо от того, нажата она или нет) каждый момент:
readButton :: IO Boolean
readButton = ...
main = do
(add, fire) <- newAddHandler
network <- compile (desc add)
actuate network
forever $ do
buttonState <- readButton
fire buttonState
desc addButtonEvent = do
eButtonState <- fromAddHandler addButtonEvent
...
Все состояния чтения сохраняются в eButtonState
в описании сети desc
.
Кнопка считается вновь нажатой, когда состояние текущего момента равно 1
, а состояние предыдущего момента равно 0
. Итак, если бы последовательность событий была списком, функция была бы написана так:
f :: [Bool] -> Bool
f (True:False:_) = True
f _ = False
Я хочу применить эту функцию к eButtonState
, чтобы знать, нажата ли кнопка в данный момент или нет.
Возможно ли это? Как бы вы это сделали? Буду признателен, если есть лучшая или более распространенная идея или метод для достижения этой цели.