反射:根据行为延迟事件

时间:2017-11-01 14:24:59

标签: haskell reflex

使用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 ()))

但是返回事件永远不会发生。我在这里犯了一个简单的错误,或者整个方法是否需要重新思考?

1 个答案:

答案 0 :(得分:0)

显然,延迟永远不会触发,因为当eDelsM定义的窗口小部件从事件e0处于活动状态时,它将等到下一个事件e1创建延迟。但是,当事件的下一个实例触发e1时,eDelsM窗口小部件的新实例将变为活动状态并开始等待事件的下一个实例e2。解决方案是在重新创建eDelsM后立即触发新事件。

eDelsM = (\t -> getPostBuild >>= delay t) <$> b <@ e