Рефлекс: отсрочка событий на основе поведения

Используя reflex-frp и reflex-dom, мне нужно отложить события на основе поведения. У меня есть:

delayEvent :: (MonadWidget t m, Reflex t) 
           => Event t () -> Behavior t NominalDiffTime -> m (Event t ())
delayEvent e b = switch . current <$> widgetHold (return never) eDelsM
  where
    eDelsM = (`delay` e) <$> b <@ e -- Event t (m (Event t ()))

однако событие возврата никогда не срабатывает. Есть ли простая ошибка, которую я здесь делаю, или весь подход нуждается в переосмыслении?


person trevor cook    schedule 01.11.2017    source источник


Ответы (1)


По-видимому, задержка никогда не сработает, потому что, когда виджет, определенный eDelsM, активен после события e0, он будет ждать до следующего события e1, чтобы создать задержку. Однако к моменту запуска следующего экземпляра события e1 новый экземпляр виджета eDelsM станет активным и начнет ожидать следующего экземпляра события e2. Решение состоит в том, чтобы инициировать новое событие, как только eDelsM будет воссоздано.

eDelsM = (\t -> getPostBuild >>= delay t) <$> b <@ e   
person trevor cook    schedule 30.11.2017