rcu-0.2.7: Read-Copy-Update for Haskell
Copyright(C) 2015 Edward Kmett and Ted Cooper
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <[email protected]> Ted Cooper <[email protected]>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellTrustworthy
LanguageHaskell2010

Control.Concurrent.RCU.QSBR

Description

Quiescent-State-Based Reclamation

Synopsis

Documentation

data SRef s a Source #

Shared references

Instances

Instances details
MonadNew (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> RCU s (SRef s a) Source #

MonadNew (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> ReadingRCU s (SRef s a) Source #

MonadNew (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> WritingRCU s (SRef s a) Source #

MonadRCU (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Associated Types

type Reading (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Reading (RCU s) = ReadingRCU s
type Writing (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Writing (RCU s) = WritingRCU s
type Thread (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Thread (RCU s) = RCUThread s

Methods

forking :: RCU s a -> RCU s (Thread (RCU s) a) Source #

joining :: Thread (RCU s) a -> RCU s a Source #

reading :: Reading (RCU s) a -> RCU s a Source #

writing :: Writing (RCU s) a -> RCU s a Source #

MonadReading (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> ReadingRCU s a Source #

MonadReading (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> WritingRCU s a Source #

MonadWriting (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

writeSRef :: SRef s a -> a -> WritingRCU s () Source #

synchronize :: WritingRCU s () Source #

Eq (SRef s a) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

(==) :: SRef s a -> SRef s a -> Bool #

(/=) :: SRef s a -> SRef s a -> Bool #

data RCU s a Source #

This is an RCU computation. It can use forking and joining to form new threads, and then you can use reading and writing to run classic read-side and write-side RCU computations. Writers are serialized using an MVar, readers are able to proceed while writers are updating.

Instances

Instances details
MonadIO (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

liftIO :: IO a -> RCU s a #

Applicative (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

pure :: a -> RCU s a #

(<*>) :: RCU s (a -> b) -> RCU s a -> RCU s b #

liftA2 :: (a -> b -> c) -> RCU s a -> RCU s b -> RCU s c #

(*>) :: RCU s a -> RCU s b -> RCU s b #

(<*) :: RCU s a -> RCU s b -> RCU s a #

Functor (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fmap :: (a -> b) -> RCU s a -> RCU s b #

(<$) :: a -> RCU s b -> RCU s a #

Monad (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

(>>=) :: RCU s a -> (a -> RCU s b) -> RCU s b #

(>>) :: RCU s a -> RCU s b -> RCU s b #

return :: a -> RCU s a #

MonadNew (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> RCU s (SRef s a) Source #

MonadRCU (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Associated Types

type Reading (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Reading (RCU s) = ReadingRCU s
type Writing (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Writing (RCU s) = WritingRCU s
type Thread (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Thread (RCU s) = RCUThread s

Methods

forking :: RCU s a -> RCU s (Thread (RCU s) a) Source #

joining :: Thread (RCU s) a -> RCU s a Source #

reading :: Reading (RCU s) a -> RCU s a Source #

writing :: Writing (RCU s) a -> RCU s a Source #

type Reading (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Reading (RCU s) = ReadingRCU s
type Thread (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Thread (RCU s) = RCUThread s
type Writing (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Writing (RCU s) = WritingRCU s

runRCU :: (forall s. RCU s a) -> IO a Source #

Run an RCU computation.

class Monad m => MonadNew (s :: Type -> Type) (m :: Type -> Type) | m -> s where Source #

Minimal complete definition

Nothing

Methods

newSRef :: a -> m (s a) Source #

Build a new shared reference

default newSRef :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) a. (m ~ t n, MonadTrans t, MonadNew s n) => a -> m (s a) Source #

Instances

Instances details
MonadNew s m => MonadNew s (MaybeT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> MaybeT m (s a) Source #

MonadNew s m => MonadNew s (ExceptT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> ExceptT e m (s a) Source #

MonadNew s m => MonadNew s (IdentityT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> IdentityT m (s a) Source #

MonadNew s m => MonadNew s (ReaderT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> ReaderT e m (s a) Source #

(MonadNew s m, Monoid w) => MonadNew s (WriterT w m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> WriterT w m (s a) Source #

(MonadNew s m, Monoid w) => MonadNew s (WriterT w m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> WriterT w m (s a) Source #

MonadNew s' m => MonadNew s' (StateT s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> StateT s m (s' a) Source #

MonadNew s' m => MonadNew s' (StateT s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> StateT s m (s' a) Source #

(MonadNew s' m, Monoid w) => MonadNew s' (RWST r w s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> RWST r w s m (s' a) Source #

(MonadNew s' m, Monoid w) => MonadNew s' (RWST r w s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> RWST r w s m (s' a) Source #

MonadNew (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

newSRef :: a -> RCU s (SRef s a) Source #

MonadNew (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

newSRef :: a -> ReadingRCU s (SRef s a) Source #

MonadNew (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

newSRef :: a -> WritingRCU s (SRef s a) Source #

MonadNew (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> RCU s (SRef s a) Source #

MonadNew (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> ReadingRCU s (SRef s a) Source #

MonadNew (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> WritingRCU s (SRef s a) Source #

class MonadNew s m => MonadReading (s :: Type -> Type) (m :: Type -> Type) | m -> s where Source #

This is a read-side critical section

Minimal complete definition

Nothing

Methods

readSRef :: s a -> m a Source #

Read a shared reference.

default readSRef :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) a. (m ~ t n, MonadTrans t, MonadReading s n) => s a -> m a Source #

Instances

Instances details
MonadReading s m => MonadReading s (MaybeT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> MaybeT m a Source #

MonadReading s m => MonadReading s (ExceptT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> ExceptT e m a Source #

MonadReading s m => MonadReading s (IdentityT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> IdentityT m a Source #

MonadReading s m => MonadReading s (ReaderT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> ReaderT e m a Source #

(MonadReading s m, Monoid w) => MonadReading s (WriterT w m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> WriterT w m a Source #

(MonadReading s m, Monoid w) => MonadReading s (WriterT w m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> WriterT w m a Source #

MonadReading s' m => MonadReading s' (StateT s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s' a -> StateT s m a Source #

MonadReading s' m => MonadReading s' (StateT s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s' a -> StateT s m a Source #

(MonadReading s' m, Monoid w) => MonadReading s' (RWST r w s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s' a -> RWST r w s m a Source #

(MonadReading s' m, Monoid w) => MonadReading s' (RWST r w s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s' a -> RWST r w s m a Source #

MonadReading (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

readSRef :: SRef s a -> ReadingRCU s a Source #

MonadReading (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

readSRef :: SRef s a -> WritingRCU s a Source #

MonadReading (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> ReadingRCU s a Source #

MonadReading (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> WritingRCU s a Source #

class MonadReading s m => MonadWriting (s :: Type -> Type) (m :: Type -> Type) | m -> s where Source #

This is a write-side critical section

Minimal complete definition

Nothing

Methods

writeSRef :: s a -> a -> m () Source #

Write to a shared reference.

default writeSRef :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type) a. (m ~ t n, MonadTrans t, MonadWriting s n) => s a -> a -> m () Source #

synchronize :: m () Source #

Synchronize with other writers.

No other writer can straddle this time bound. It will either see writes from before, or writes after, but never some of both!

default synchronize :: forall (t :: (Type -> Type) -> Type -> Type) (n :: Type -> Type). (m ~ t n, MonadTrans t, MonadWriting s n) => m () Source #

Instances

Instances details
MonadWriting s m => MonadWriting s (MaybeT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s a -> a -> MaybeT m () Source #

synchronize :: MaybeT m () Source #

MonadWriting s m => MonadWriting s (ExceptT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s a -> a -> ExceptT e m () Source #

synchronize :: ExceptT e m () Source #

MonadWriting s m => MonadWriting s (IdentityT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s a -> a -> IdentityT m () Source #

synchronize :: IdentityT m () Source #

MonadWriting s m => MonadWriting s (ReaderT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s a -> a -> ReaderT e m () Source #

synchronize :: ReaderT e m () Source #

(MonadWriting s m, Monoid w) => MonadWriting s (WriterT w m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s a -> a -> WriterT w m () Source #

synchronize :: WriterT w m () Source #

(MonadWriting s m, Monoid w) => MonadWriting s (WriterT w m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s a -> a -> WriterT w m () Source #

synchronize :: WriterT w m () Source #

MonadWriting s' m => MonadWriting s' (StateT s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s' a -> a -> StateT s m () Source #

synchronize :: StateT s m () Source #

MonadWriting s' m => MonadWriting s' (StateT s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s' a -> a -> StateT s m () Source #

synchronize :: StateT s m () Source #

(MonadWriting s' m, Monoid w) => MonadWriting s' (RWST r w s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s' a -> a -> RWST r w s m () Source #

synchronize :: RWST r w s m () Source #

(MonadWriting s' m, Monoid w) => MonadWriting s' (RWST r w s m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

writeSRef :: s' a -> a -> RWST r w s m () Source #

synchronize :: RWST r w s m () Source #

MonadWriting (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

writeSRef :: SRef s a -> a -> WritingRCU s () Source #

synchronize :: WritingRCU s () Source #

MonadWriting (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

writeSRef :: SRef s a -> a -> WritingRCU s () Source #

synchronize :: WritingRCU s () Source #

class (MonadReading s (Reading m), MonadWriting s (Writing m), MonadNew s m) => MonadRCU (s :: Type -> Type) (m :: Type -> Type) | m -> s where Source #

This is the executor service that can fork, join and execute critical sections.

Associated Types

type Reading (m :: Type -> Type) :: Type -> Type Source #

A read-side critical section

type Writing (m :: Type -> Type) :: Type -> Type Source #

A write-side critical section

type Thread (m :: Type -> Type) :: Type -> Type Source #

Threads we can fork and join

Methods

forking :: m a -> m (Thread m a) Source #

Fork a thread

joining :: Thread m a -> m a Source #

Join a thread

reading :: Reading m a -> m a Source #

Run a read-side critical section

writing :: Writing m a -> m a Source #

Run a write-side critical section

Instances

Instances details
MonadRCU s m => MonadRCU s (MaybeT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

type Reading (MaybeT m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Reading (MaybeT m) = MaybeT (Reading m)
type Writing (MaybeT m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Writing (MaybeT m) = MaybeT (Writing m)
type Thread (MaybeT m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (MaybeT m) = MaybeT (Thread m)

Methods

forking :: MaybeT m a -> MaybeT m (Thread (MaybeT m) a) Source #

joining :: Thread (MaybeT m) a -> MaybeT m a Source #

reading :: Reading (MaybeT m) a -> MaybeT m a Source #

writing :: Writing (MaybeT m) a -> MaybeT m a Source #

MonadRCU s m => MonadRCU s (ExceptT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

type Reading (ExceptT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Reading (ExceptT e m) = ExceptT e (Reading m)
type Writing (ExceptT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Writing (ExceptT e m) = ExceptT e (Writing m)
type Thread (ExceptT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (ExceptT e m) = ExceptT e (Thread m)

Methods

forking :: ExceptT e m a -> ExceptT e m (Thread (ExceptT e m) a) Source #

joining :: Thread (ExceptT e m) a -> ExceptT e m a Source #

reading :: Reading (ExceptT e m) a -> ExceptT e m a Source #

writing :: Writing (ExceptT e m) a -> ExceptT e m a Source #

MonadRCU s m => MonadRCU s (IdentityT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

type Reading (IdentityT m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Writing (IdentityT m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (IdentityT m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (IdentityT m) = Thread m
MonadRCU s m => MonadRCU s (ReaderT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

type Reading (ReaderT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Reading (ReaderT e m) = ReaderT e (Reading m)
type Writing (ReaderT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Writing (ReaderT e m) = ReaderT e (Writing m)
type Thread (ReaderT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (ReaderT e m) = Thread m

Methods

forking :: ReaderT e m a -> ReaderT e m (Thread (ReaderT e m) a) Source #

joining :: Thread (ReaderT e m) a -> ReaderT e m a Source #

reading :: Reading (ReaderT e m) a -> ReaderT e m a Source #

writing :: Writing (ReaderT e m) a -> ReaderT e m a Source #

(MonadRCU s m, Monoid e) => MonadRCU s (WriterT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

type Reading (WriterT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Reading (WriterT e m) = WriterT e (Reading m)
type Writing (WriterT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Writing (WriterT e m) = WriterT e (Writing m)
type Thread (WriterT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (WriterT e m) = WriterT e (Thread m)

Methods

forking :: WriterT e m a -> WriterT e m (Thread (WriterT e m) a) Source #

joining :: Thread (WriterT e m) a -> WriterT e m a Source #

reading :: Reading (WriterT e m) a -> WriterT e m a Source #

writing :: Writing (WriterT e m) a -> WriterT e m a Source #

(MonadRCU s m, Monoid e) => MonadRCU s (WriterT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

type Reading (WriterT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Reading (WriterT e m) = WriterT e (Reading m)
type Writing (WriterT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Writing (WriterT e m) = WriterT e (Writing m)
type Thread (WriterT e m) 
Instance details

Defined in Control.Concurrent.RCU.Class

type Thread (WriterT e m) = WriterT e (Thread m)

Methods

forking :: WriterT e m a -> WriterT e m (Thread (WriterT e m) a) Source #

joining :: Thread (WriterT e m) a -> WriterT e m a Source #

reading :: Reading (WriterT e m) a -> WriterT e m a Source #

writing :: Writing (WriterT e m) a -> WriterT e m a Source #

MonadRCU (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Associated Types

type Reading (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

type Reading (RCU s) = ReadingRCU s
type Writing (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

type Writing (RCU s) = WritingRCU s
type Thread (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

type Thread (RCU s) = RCUThread s

Methods

forking :: RCU s a -> RCU s (Thread (RCU s) a) Source #

joining :: Thread (RCU s) a -> RCU s a Source #

reading :: Reading (RCU s) a -> RCU s a Source #

writing :: Writing (RCU s) a -> RCU s a Source #

MonadRCU (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Associated Types

type Reading (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Reading (RCU s) = ReadingRCU s
type Writing (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Writing (RCU s) = WritingRCU s
type Thread (RCU s) 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

type Thread (RCU s) = RCUThread s

Methods

forking :: RCU s a -> RCU s (Thread (RCU s) a) Source #

joining :: Thread (RCU s) a -> RCU s a Source #

reading :: Reading (RCU s) a -> RCU s a Source #

writing :: Writing (RCU s) a -> RCU s a Source #

Implementation Details

data ReadingRCU s a Source #

This is the basic read-side critical section for an RCU computation

Instances

Instances details
MonadFail (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fail :: String -> ReadingRCU s a #

Alternative (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

empty :: ReadingRCU s a #

(<|>) :: ReadingRCU s a -> ReadingRCU s a -> ReadingRCU s a #

some :: ReadingRCU s a -> ReadingRCU s [a] #

many :: ReadingRCU s a -> ReadingRCU s [a] #

Applicative (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

pure :: a -> ReadingRCU s a #

(<*>) :: ReadingRCU s (a -> b) -> ReadingRCU s a -> ReadingRCU s b #

liftA2 :: (a -> b -> c) -> ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s c #

(*>) :: ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s b #

(<*) :: ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s a #

Functor (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fmap :: (a -> b) -> ReadingRCU s a -> ReadingRCU s b #

(<$) :: a -> ReadingRCU s b -> ReadingRCU s a #

Monad (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

(>>=) :: ReadingRCU s a -> (a -> ReadingRCU s b) -> ReadingRCU s b #

(>>) :: ReadingRCU s a -> ReadingRCU s b -> ReadingRCU s b #

return :: a -> ReadingRCU s a #

MonadPlus (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

mzero :: ReadingRCU s a #

mplus :: ReadingRCU s a -> ReadingRCU s a -> ReadingRCU s a #

MonadNew (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> ReadingRCU s (SRef s a) Source #

MonadReading (SRef s) (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> ReadingRCU s a Source #

data WritingRCU s a Source #

This is the basic write-side critical section for an RCU computation

Instances

Instances details
MonadFail (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fail :: String -> WritingRCU s a #

Alternative (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

empty :: WritingRCU s a #

(<|>) :: WritingRCU s a -> WritingRCU s a -> WritingRCU s a #

some :: WritingRCU s a -> WritingRCU s [a] #

many :: WritingRCU s a -> WritingRCU s [a] #

Applicative (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

pure :: a -> WritingRCU s a #

(<*>) :: WritingRCU s (a -> b) -> WritingRCU s a -> WritingRCU s b #

liftA2 :: (a -> b -> c) -> WritingRCU s a -> WritingRCU s b -> WritingRCU s c #

(*>) :: WritingRCU s a -> WritingRCU s b -> WritingRCU s b #

(<*) :: WritingRCU s a -> WritingRCU s b -> WritingRCU s a #

Functor (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

fmap :: (a -> b) -> WritingRCU s a -> WritingRCU s b #

(<$) :: a -> WritingRCU s b -> WritingRCU s a #

Monad (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

(>>=) :: WritingRCU s a -> (a -> WritingRCU s b) -> WritingRCU s b #

(>>) :: WritingRCU s a -> WritingRCU s b -> WritingRCU s b #

return :: a -> WritingRCU s a #

MonadPlus (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

mzero :: WritingRCU s a #

mplus :: WritingRCU s a -> WritingRCU s a -> WritingRCU s a #

MonadNew (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> WritingRCU s (SRef s a) Source #

MonadReading (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

readSRef :: SRef s a -> WritingRCU s a Source #

MonadWriting (SRef s) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

writeSRef :: SRef s a -> a -> WritingRCU s () Source #

synchronize :: WritingRCU s () Source #

data RCUThread s a Source #

This is a basic RCU thread. It may be embellished when running in a more exotic context.