使用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 ()))
但是返回事件永远不会发生。我在这里犯了一个简单的错误,或者整个方法是否需要重新思考?
答案 0 :(得分:0)
显然,延迟永远不会触发,因为当eDelsM
定义的窗口小部件从事件e0
处于活动状态时,它将等到下一个事件e1
创建延迟。但是,当事件的下一个实例触发e1
时,eDelsM
窗口小部件的新实例将变为活动状态并开始等待事件的下一个实例e2
。解决方案是在重新创建eDelsM
后立即触发新事件。
eDelsM = (\t -> getPostBuild >>= delay t) <$> b <@ e