effects-thread
Safe HaskellNone
LanguageGHC2021

Effects.Concurrent.Thread

Description

Provides the MonadThread typeclass.

Since: 0.1

Synopsis

Thread Effect

class Monad m => MonadThread (m :: Type -> Type) where Source #

Represents thread effects.

Since: 0.1

Methods

threadDelay :: Int -> m () Source #

Lifted threadDelay.

Since: 0.1

throwTo :: (Exception e, HasCallStack) => ThreadId -> e -> m () Source #

Lifted throwTo.

Since: 0.1

getNumCapabilities :: m Int Source #

Lifted getNumCapabilities.

Since: 0.1

setNumCapabilities :: Int -> m () Source #

Lifted setNumCapabilities.

Since: 0.1

threadCapability :: ThreadId -> m (Int, Bool) Source #

Lifted threadCapability.

Since: 0.1

myThreadId :: m ThreadId Source #

Lifted myThreadId.

Since: 0.1

labelThread :: ThreadId -> String -> m () Source #

Lifted labelThread.

Since: 0.1

threadLabel :: ThreadId -> m (Maybe String) Source #

Lifted threadLabel.

Since: 0.1

microsleep :: (HasCallStack, MonadThread m) => Natural -> m () Source #

threadDelay in terms of unbounded Natural rather than Int i.e. runs sleep in the current thread for the specified number of microseconds.

Since: 0.1

sleep :: (HasCallStack, MonadThread m) => Natural -> m () Source #

Runs sleep in the current thread for the specified number of seconds.

Since: 0.1

Reexports

data Natural #

Natural number

Invariant: numbers <= 0xffffffffffffffff use the NS constructor

Instances

Instances details
PrintfArg Natural #

Since: base-4.8.0.0

Instance details

Defined in Text.Printf

Enum Natural #

Since: base-4.8.0.0

Instance details

Defined in GHC.Internal.Enum

Num Natural #

Note that Natural's Num instance isn't a ring: no element but 0 has an additive inverse. It is a semiring though.

Since: base-4.8.0.0

Instance details

Defined in GHC.Internal.Num

Integral Natural #

Since: base-4.8.0.0

Instance details

Defined in GHC.Internal.Real

Real Natural #

Since: base-4.8.0.0

Instance details

Defined in GHC.Internal.Real

Show Natural #

Since: base-4.8.0.0

Instance details

Defined in GHC.Internal.Show

Eq Natural # 
Instance details

Defined in GHC.Num.Natural

Methods

(==) :: Natural -> Natural -> Bool #

(/=) :: Natural -> Natural -> Bool #

Ord Natural # 
Instance details

Defined in GHC.Num.Natural

KnownNat n => HasResolution (n :: Nat) #

For example, Fixed 1000 will give you a Fixed with a resolution of 1000.

Instance details

Defined in Data.Fixed

Methods

resolution :: p n -> Integer #

data ThreadId #

A ThreadId is an abstract type representing a handle to a thread. ThreadId is an instance of Eq, Ord and Show, where the Ord instance implements an arbitrary total ordering over ThreadIds. The Show instance lets you convert an arbitrary-valued ThreadId to string form; showing a ThreadId value is occasionally useful when debugging or diagnosing the behaviour of a concurrent program.

Note: in GHC, if you have a ThreadId, you essentially have a pointer to the thread itself. This means the thread itself can't be garbage collected until you drop the ThreadId. This misfeature would be difficult to correct while continuing to support threadStatus.

Instances

Instances details
Show ThreadId #

Since: base-4.2.0.0

Instance details

Defined in GHC.Internal.Conc.Sync

Eq ThreadId #

Since: base-4.2.0.0

Instance details

Defined in GHC.Internal.Conc.Sync

Ord ThreadId #

Since: base-4.2.0.0

Instance details

Defined in GHC.Internal.Conc.Sync

MVar Effect

class Monad m => MonadMVar (m :: Type -> Type) where Source #

Effect for MVar.

Since: 0.1

Methods

newEmptyMVar :: m (MVar a) Source #

Lifted newEmptyMVar.

Since: 0.1

newMVar :: a -> m (MVar a) Source #

Lifted newMVar.

Since: 0.1

takeMVar :: MVar a -> m a Source #

Lifted takeMVar.

Since: 0.1

putMVar :: MVar a -> a -> m () Source #

Lifted putMVar.

Since: 0.1

tryTakeMVar :: MVar a -> m (Maybe a) Source #

Lifted tryTakeMVar.

Since: 0.1

tryPutMVar :: MVar a -> a -> m Bool Source #

Lifted tryPutMVar.

Since: 0.1

isEmptyMVar :: MVar a -> m Bool Source #

Lifted isEmptyMVar.

Since: 0.1

withMVar :: MVar a -> (a -> m b) -> m b Source #

Lifted withMVar.

Since: 0.1

withMVarMasked :: MVar a -> (a -> m b) -> m b Source #

Lifted withMVarMasked.

Since: 0.1

modifyMVar_ :: MVar a -> (a -> m a) -> m () Source #

Lifted modifyMVar_.

Since: 0.1

modifyMVar :: MVar a -> (a -> m (a, b)) -> m b Source #

Lifted modifyMVar.

Since: 0.1

modifyMVarMasked_ :: MVar a -> (a -> m a) -> m () Source #

Lifted modifyMVarMasked_.

Since: 0.1

modifyMVarMasked :: MVar a -> (a -> m (a, b)) -> m b Source #

Lifted modifyMVarMasked.

Since: 0.1

tryReadMVar :: MVar a -> m (Maybe a) Source #

Lifted tryReadMVar.

Since: 0.1

mkWeakMVar :: MVar a -> m () -> m (Weak (MVar a)) Source #

Lifted mkWeakMVar.

Since: 0.1

Instances

Instances details
MonadMVar IO Source #

Since: 0.1

Instance details

Defined in Effects.Concurrent.Thread

Methods

newEmptyMVar :: IO (MVar a) Source #

newMVar :: a -> IO (MVar a) Source #

takeMVar :: MVar a -> IO a Source #

putMVar :: MVar a -> a -> IO () Source #

tryTakeMVar :: MVar a -> IO (Maybe a) Source #

tryPutMVar :: MVar a -> a -> IO Bool Source #

isEmptyMVar :: MVar a -> IO Bool Source #

withMVar :: MVar a -> (a -> IO b) -> IO b Source #

withMVarMasked :: MVar a -> (a -> IO b) -> IO b Source #

modifyMVar_ :: MVar a -> (a -> IO a) -> IO () Source #

modifyMVar :: MVar a -> (a -> IO (a, b)) -> IO b Source #

modifyMVarMasked_ :: MVar a -> (a -> IO a) -> IO () Source #

modifyMVarMasked :: MVar a -> (a -> IO (a, b)) -> IO b Source #

tryReadMVar :: MVar a -> IO (Maybe a) Source #

mkWeakMVar :: MVar a -> IO () -> IO (Weak (MVar a)) Source #

MonadMVar m => MonadMVar (ReaderT e m) Source #

Since: 0.1

Instance details

Defined in Effects.Concurrent.Thread

Methods

newEmptyMVar :: ReaderT e m (MVar a) Source #

newMVar :: a -> ReaderT e m (MVar a) Source #

takeMVar :: MVar a -> ReaderT e m a Source #

putMVar :: MVar a -> a -> ReaderT e m () Source #

tryTakeMVar :: MVar a -> ReaderT e m (Maybe a) Source #

tryPutMVar :: MVar a -> a -> ReaderT e m Bool Source #

isEmptyMVar :: MVar a -> ReaderT e m Bool Source #

withMVar :: MVar a -> (a -> ReaderT e m b) -> ReaderT e m b Source #

withMVarMasked :: MVar a -> (a -> ReaderT e m b) -> ReaderT e m b Source #

modifyMVar_ :: MVar a -> (a -> ReaderT e m a) -> ReaderT e m () Source #

modifyMVar :: MVar a -> (a -> ReaderT e m (a, b)) -> ReaderT e m b Source #

modifyMVarMasked_ :: MVar a -> (a -> ReaderT e m a) -> ReaderT e m () Source #

modifyMVarMasked :: MVar a -> (a -> ReaderT e m (a, b)) -> ReaderT e m b Source #

tryReadMVar :: MVar a -> ReaderT e m (Maybe a) Source #

mkWeakMVar :: MVar a -> ReaderT e m () -> ReaderT e m (Weak (MVar a)) Source #

Reexports

data MVar a #

An MVar (pronounced "em-var") is a synchronising variable, used for communication between concurrent threads. It can be thought of as a box, which may be empty or full.

Instances

Instances details
Eq (MVar a) #

Compares the underlying pointers.

Since: base-4.1.0.0

Instance details

Defined in GHC.Internal.MVar

Methods

(==) :: MVar a -> MVar a -> Bool #

(/=) :: MVar a -> MVar a -> Bool #

QSem Effect

class Monad m => MonadQSem (m :: Type -> Type) where Source #

Effect for QSem semaphore.

Since: 0.1

Methods

newQSem :: Int -> m QSem Source #

Lifted newQSem.

Since: 0.1

waitQSem :: QSem -> m () Source #

Lifted waitQSem.

Since: 0.1

signalQSem :: QSem -> m () Source #

Lifted signalQSem.

Since: 0.1

Instances

Instances details
MonadQSem IO Source #

Since: 0.1

Instance details

Defined in Effects.Concurrent.Thread

MonadQSem m => MonadQSem (ReaderT e m) Source #

Since: 0.1

Instance details

Defined in Effects.Concurrent.Thread

Methods

newQSem :: Int -> ReaderT e m QSem Source #

waitQSem :: QSem -> ReaderT e m () Source #

signalQSem :: QSem -> ReaderT e m () Source #

class Monad m => MonadQSemN (m :: Type -> Type) where Source #

Effect for QSemN semaphore.

Since: 0.1

Methods

newQSemN :: Int -> m QSemN Source #

Lifted newQSemN.

Since: 0.1

waitQSemN :: QSemN -> Int -> m () Source #

Lifted waitQSemN.

Since: 0.1

signalQSemN :: QSemN -> Int -> m () Source #

Lifted signalQSemN.

Since: 0.1

Instances

Instances details
MonadQSemN IO Source #

Since: 0.1

Instance details

Defined in Effects.Concurrent.Thread

MonadQSemN m => MonadQSemN (ReaderT e m) Source #

Since: 0.1

Instance details

Defined in Effects.Concurrent.Thread

Methods

newQSemN :: Int -> ReaderT e m QSemN Source #

waitQSemN :: QSemN -> Int -> ReaderT e m () Source #

signalQSemN :: QSemN -> Int -> ReaderT e m () Source #

Reexports

data QSem #

QSem is a quantity semaphore in which the resource is acquired and released in units of one. It provides guaranteed FIFO ordering for satisfying blocked waitQSem calls.

The pattern

bracket_ waitQSem signalQSem (...)

is safe; it never loses a unit of the resource.

data QSemN #

QSemN is a quantity semaphore in which the resource is acquired and released in arbitrary amounts. It provides guaranteed FIFO ordering for satisfying blocked waitQSemN calls.

The pattern

bracket_ (waitQSemN n) (signalQSemN n) (...)

is safe; it never loses any of the resource.