    {-# LANGUAGE CPP                 #-}
    {-# LANGUAGE DeriveDataTypeable  #-}
    {-# LANGUAGE DeriveFunctor       #-}
    {-# LANGUAGE DeriveGeneric       #-}
    {-# LANGUAGE GADTs               #-}
    {-# LANGUAGE LambdaCase          #-}
    {-# LANGUAGE RankNTypes          #-}
    {-# LANGUAGE ScopedTypeVariables #-}
    {-# LANGUAGE StandaloneDeriving  #-}
    -- | Unlifted "Control.Concurrent.Async".
    --
    -- @since 0.1.0.0
    module UnliftIO.Async
      (
        -- * Asynchronous actions
        Async,
        -- ** Spawning
        async, asyncBound, asyncOn, asyncWithUnmask, asyncOnWithUnmask,

        -- ** Spawning with automatic 'cancel'ation
        withAsync, withAsyncBound, withAsyncOn, withAsyncWithUnmask,
        withAsyncOnWithUnmask,

        -- ** Querying 'Async's
        wait, poll, waitCatch, cancel, uninterruptibleCancel, cancelWith,
        A.asyncThreadId,

        -- ** STM operations
        A.waitSTM, A.pollSTM, A.waitCatchSTM,

        -- ** Waiting for multiple 'Async's
        waitAny, waitAnyCatch, waitAnyCancel, waitAnyCatchCancel,
        waitEither, waitEitherCatch, waitEitherCancel, waitEitherCatchCancel,
        waitEither_,
        waitBoth,

        -- ** Waiting for multiple 'Async's in STM
        A.waitAnySTM, A.waitAnyCatchSTM,
        A.waitEitherSTM, A.waitEitherCatchSTM,
        A.waitEitherSTM_,
        A.waitBothSTM,

        -- ** Linking
        link, link2,

        -- ** Pooled concurrency
        pooledMapConcurrentlyN,
        pooledMapConcurrently,
        pooledMapConcurrentlyN_,
        pooledMapConcurrently_,
        pooledForConcurrentlyN,
        pooledForConcurrently,
        pooledForConcurrentlyN_,
        pooledForConcurrently_,
        pooledReplicateConcurrentlyN,
        pooledReplicateConcurrently,
        pooledReplicateConcurrentlyN_,
        pooledReplicateConcurrently_,

        -- * Convenient utilities
        race, race_,
        concurrently, concurrently_,
        mapConcurrently, forConcurrently,
        mapConcurrently_, forConcurrently_,
        replicateConcurrently, replicateConcurrently_,
        Concurrently (..),

    #if MIN_VERSION_base(4,8,0)
        Conc, conc, runConc,
        ConcException (..)
    #endif
      ) where

    import           Control.Concurrent.Async (Async)
    import qualified Control.Concurrent.Async as A
    import UnliftIO.Internals.Async