module Access.Control.Concurrent
( module Control.Concurrent
, module Access.Control.Concurrent.MVar
, module Access.Control.Concurrent.Chan
, ThreadAccess(..)
, BoundThreadAccess(..)
, WeakThreadAccess(..)
) where
import Control.Concurrent
import System.Posix.Types (Fd)
import Access.System.Mem.Weak
import Access.Control.Exception
import Access.Control.Concurrent.MVar
import Access.Control.Concurrent.Chan
class ExceptionAccess io => ThreadAccess io where
myThreadId' :: io ThreadId
forkIO' :: io () -> io ThreadId
forkFinally' :: io a -> (Either SomeException a -> io ()) -> io ThreadId
forkIOWithUnmask' :: ((forall a. io a -> io a) -> io ()) -> io ThreadId
killThread' :: ThreadId -> io ()
throwTo' :: Exception e => ThreadId -> e -> io ()
throwTo' = Access.Control.Exception.throwTo'
forkOn' :: Int -> io () -> io ThreadId
forkOnWithUnmask' :: Int -> ((forall a. io a -> io a) -> io ()) -> io ThreadId
getNumCapabilities' :: io Int
setNumCapabilities' :: Int -> io ()
threadCapability' :: ThreadId -> io (Int, Bool)
yield' :: io ()
threadDelay' :: Int -> io ()
threadWaitRead' :: Fd -> io ()
threadWaitWrite' :: Fd -> io ()
class ThreadAccess io => BoundThreadAccess io where
forkOS' :: io () -> io ThreadId
isCurrentThreadBound' :: io Bool
runInBoundThread' :: io a -> io a
runInUnboundThread' :: io a -> io a
class WeakMemAccess io => WeakThreadAccess io where
mkWeakThreadId' :: ThreadId -> io (Weak ThreadId)
instance ThreadAccess IO where
myThreadId' = myThreadId
forkIO' = forkIO
forkFinally' = forkFinally
forkIOWithUnmask' = forkIOWithUnmask
killThread' = killThread
throwTo' = throwTo
forkOn' = forkOn
forkOnWithUnmask' = forkOnWithUnmask
getNumCapabilities' = getNumCapabilities
setNumCapabilities' = setNumCapabilities
threadCapability' = threadCapability
yield' = yield
threadDelay' = threadDelay
threadWaitRead' = threadWaitRead
threadWaitWrite' = threadWaitWrite
instance BoundThreadAccess IO where
forkOS' = forkOS
isCurrentThreadBound' = isCurrentThreadBound
runInBoundThread' = runInBoundThread
runInUnboundThread' = runInUnboundThread
instance WeakThreadAccess IO where
mkWeakThreadId' = mkWeakThreadId