5

私は Haskell 内で Reflex を使用しており、(質問の目的で) 一定時間、たとえば 2 秒後に発生するイベントを作成しようとしています。ただし、元のイベントが発生するたびにカウンターをリセットする必要があるため、元のイベントが 1 秒間隔で 2 回発生する場合、2 番目のイベントの発生は 1 回のみである必要があります。つまり、最後の元のイベントの 2 秒後です。

私はこの動作を実装することができました

delayedReset :: MonadWidget t m => Event t () -> m (Event t ())
delayedReset ev = fmap (switch . current) . widgetHold (return never) $ timer <$ ev
  where
    timer = delay 2 =<< getPostBuild

しかし、widgetHold を使用するのはやり過ぎのようです。MonadHold 制約だけが本当に必要なようです。この関数を記述するより慣用的な方法はありますか?

4

1 に答える 1