hspec-core-2.11.17: src/Test/Hspec/Core/Timer.hs
module Test.Hspec.Core.Timer (withTimer) where
import Prelude ()
import Test.Hspec.Core.Compat
import Control.Concurrent.Async
import Test.Hspec.Core.Clock
withTimer :: Seconds -> (IO Bool -> IO a) -> IO a
withTimer delay action = do
ref <- newIORef False
bracket (async $ worker delay ref) cancel $ \_ -> do
action $ atomicModifyIORef ref (\a -> (False, a))
worker :: Seconds -> IORef Bool -> IO ()
worker delay ref = do
forever $ do
sleep delay
atomicWriteIORef ref True