packages feed

haste-lib-0.6.0.0: src/Haste/Concurrent.hs

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, TypeFamilies,
             EmptyDataDecls #-}
-- | Concurrency for Haste. Includes MVars, forking, Ajax and more.
module Haste.Concurrent (
    module Haste.Concurrent.Monad,
    wait, withResult
  ) where
import Haste.Concurrent.Monad
import Haste.Timer

-- | Wait for n milliseconds.
wait :: Int -> CIO ()
wait ms = do
  v <- newEmptyMVar
  _ <- liftIO $ setTimer (Once ms) $ concurrent $ putMVar v ()
  takeMVar v

-- | When the given concurrent computation is done, pass the result to the
--   given callback.
withResult :: CIO a -> (a -> IO ()) -> IO ()
withResult m f = concurrent $ m >>= liftIO . f