module Concurrency
( -- * Concurrency
-- ** High-level concurrency
concurrently
, concurrently_
, race
, race_
, mapConcurrently
, mapConcurrently_
, forConcurrently
, forConcurrently_
, replicateConcurrently
, replicateConcurrently_
, Concurrently(..)
-- ** Low-level concurrency using @async@
, Async
, async
, asyncBound
, asyncOn
, asyncWithUnmask
, asyncOnWithUnmask
, cancel
, uninterruptibleCancel
, cancelWith
, withAsync
, withAsyncBound
, withAsyncOn
, withAsyncWithUnmask
, withAsyncOnWithUnmask
, wait
, waitSTM
, waitCatch
, waitCatchSTM
, waitAny
, waitAnySTM
, waitAnyCatch
, waitAnyCatchSTM
, waitAnyCancel
, waitAnyCatchCancel
, waitEither
, waitEitherSTM
, waitEither_
, waitEitherSTM_
, waitEitherCatch
, waitEitherCatchSTM
, waitEitherCancel
, waitEitherCatchCancel
, waitBoth
, waitBothSTM
, poll
, pollSTM
, link
, link2
, asyncThreadId
, compareAsyncs
, ExceptionInLinkedThread(..)
, AsyncCancelled(..)
-- ** Lower-level concurrency using @forkIO@
, forkIO
, forkWithUnmask
, forkOn
, forkOnWithUnmask
, forkFinally
, throwTo
, killThread
-- * STM
, STM
, atomically
, retry
, throwSTM
, catchSTM
, unsafeIOToSTM
-- * Delay
, threadDelay
, registerDelay
-- * Cooperative concurrency
, yield
-- * Thread info
, ThreadId
, myThreadId
, mkWeakThreadId
, ThreadStatus(..)
, BlockReason(..)
, threadStatus
, threadCapability
, labelThread
-- * File descriptor blocking
, threadWaitRead
, threadWaitReadSTM
, threadWaitWrite
, threadWaitWriteSTM
, closeFdWith
-- * Re-exports
, module Concurrency.IORef
, module Concurrency.MVar
, module Concurrency.TVar
, module Concurrency.TMVar
) where
import Control.Concurrent.Async (AsyncCancelled(..),
ExceptionInLinkedThread(..), compareAsyncs)
import GHC.Conc (BlockReason(BlockedOnBlackHole, BlockedOnException, BlockedOnForeignCall, BlockedOnMVar, BlockedOnOther, BlockedOnSTM),
ThreadStatus(..), catchSTM, closeFdWith,
labelThread, retry, threadStatus,
threadWaitReadSTM, threadWaitWriteSTM,
throwSTM, unsafeIOToSTM)
import UnliftIO.Async
import UnliftIO.Concurrent
import UnliftIO.STM
-- Re-exports
import Concurrency.IORef
import Concurrency.MVar
import Concurrency.TMVar
import Concurrency.TVar