packages feed

hulk-0.1.1: src/Hulk/Concurrent.hs

module Hulk.Concurrent where

import Control.Concurrent
import Control.Monad.Reader
import Control.Monad.IO

import Hulk.Types

fork :: Hulk a -> Hulk ThreadId
fork m = do
  env <- ask
  io $ forkIO $ do _ <- runReaderT (runHulk m) env
                   return ()

withVar :: MVar a -> (a -> Hulk b) -> Hulk b
withVar var m = do
  env <- ask
  io $ withMVar var $ \var -> runReaderT (runHulk (m var)) env