-- | Protolude + the following modules re-exported from lifted-sync and
-- lifted-base packages:
--
-- * "Control.Concurrent.Async.Lifted"
-- * "Control.Concurrent.Chan.Lifted"
-- * "Control.Concurrent.Lifted"
-- * "Control.Concurrent.MVar.Lifted"
-- * "Control.Concurrent.QSem.Lifted"
-- * "Control.Concurrent.QSemN.Lifted"
-- * "Control.Exception.Lifted"
-- * "Data.IORef.Lifted"
-- * "Foreign.Marshal.Utils.Lifted"
-- * "System.Timeout.Lifted"
module Protolude.Lifted
  ( module X
  ) where

import Protolude as X hiding (
    -- lifted base
    forkFinally
  , forkOS
  , isCurrentThreadBound
  , runInBoundThread
  , runInUnboundThread
  , threadWaitRead
  , threadWaitWrite
  , dupChan
  , getChanContents
  , newChan
  , readChan
  , writeChan
  , writeList2Chan
  , mkWeakMVar
  , modifyMVar
  , modifyMVarMasked
  , modifyMVarMasked_
  , modifyMVar_
  , swapMVar
  , withMVar
  , withMVarMasked
  , newQSem
  , signalQSem
  , waitQSem
  , newQSemN
  , signalQSemN
  , waitQSemN
  , allowInterrupt
  , catches
  , bracket
  , bracketOnError
  , bracket_
  , catch
  , catchJust
  , finally
  , handle
  , handleJust
  , onException
  , try
  , tryJust
  , threadDelay
  , forkOn
  , forkOnWithUnmask
  , getNumCapabilities
  , killThread
  , mkWeakThreadId
  , myThreadId
  , setNumCapabilities
  , threadCapability
  , evaluate
  , getMaskingState
  , mask
  , mask_
  , uninterruptibleMask
  , uninterruptibleMask_
  , ioError
  , isEmptyMVar
  , newEmptyMVar
  , newMVar
  , putMVar
  , readMVar
  , takeMVar
  , tryPutMVar
  , tryReadMVar
  , tryTakeMVar
  , throwIO
  , throwTo
  -- lifted async
  , Concurrently(..)
  , async
  , runConcurrently
  , asyncBound
  , asyncOn
  , asyncOnWithUnmask
  , asyncWithUnmask
  , cancel
  , cancelWith
  , concurrently
  , forConcurrently
  , link
  , link2
  , mapConcurrently
  , poll
  , race
  , race_
  , wait
  , waitAny
  , waitAnyCancel
  , waitAnyCatch
  , waitAnyCatchCancel
  , waitBoth
  , waitCatch
  , waitEither
  , waitEitherCancel
  , waitEitherCatch
  , waitEitherCatchCancel
  , waitEither_
  , withAsync
  , withAsyncBound
  , withAsyncOn
  , withAsyncOnWithUnmask
  , withAsyncWithUnmask
  )

import Control.Concurrent.Async.Lifted as X
import Control.Concurrent.Chan.Lifted as X
import Control.Concurrent.Lifted as X
import Control.Concurrent.MVar.Lifted as X
import Control.Concurrent.QSem.Lifted as X
import Control.Concurrent.QSemN.Lifted as X
import Control.Exception.Lifted as X
import Data.IORef.Lifted as X
import Foreign.Marshal.Utils.Lifted as X
import System.Timeout.Lifted as X