blob: 7d5e7c54b6630e9e78b5e6c35393a210da44bce3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
module Util.WaitFor
( waitFor
) where
import Data.Time (NominalDiffTime)
import Reflex.Dom (Dynamic, Event, MonadWidget)
import qualified Reflex.Dom as R
waitFor
:: forall t m a b. MonadWidget t m
=> (Event t a -> m (Event t b))
-> Event t ()
-> Dynamic t a
-> m (Event t b, Event t Bool)
waitFor op start input = do
result <- op (R.tag (R.current input) start) >>= R.debounce (0.5 :: NominalDiffTime)
let waiting = R.leftmost [ const True <$> start , const False <$> result ]
return (result, waiting)
|