rcu-0.2.6: Read-Copy-Update for Haskell
Copyright(C) 2015 Edward Kmett Paul Khuong and Ted Cooper
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com> Ted Cooper <anthezium@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellTrustworthy
LanguageHaskell2010

Control.Concurrent.RCU.GC

Description

Unfenced QSBR w/ Finalizer-Based Fallback Reclamation

Synopsis

Documentation

data SRef s a Source #

Shared references

Instances

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

Defined in Control.Concurrent.RCU.GC.Internal

Associated Types

type Reading (RCU s) :: Type -> Type Source #

type Writing (RCU s) :: Type -> Type Source #

type Thread (RCU s) :: Type -> Type Source #

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 #

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 #

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.GC.Internal

Methods

readSRef :: SRef s a -> ReadingRCU 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) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

newSRef :: a -> WritingRCU 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 #

Eq (SRef s a) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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
Monad (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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 #

Functor (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

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

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

Applicative (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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 #

MonadIO (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

liftIO :: IO a -> RCU s a #

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

Defined in Control.Concurrent.RCU.GC.Internal

Associated Types

type Reading (RCU s) :: Type -> Type Source #

type Writing (RCU s) :: Type -> Type Source #

type Thread (RCU s) :: Type -> Type Source #

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 #

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

Defined in Control.Concurrent.RCU.GC.Internal

Methods

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

type Reading (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

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

Defined in Control.Concurrent.RCU.GC.Internal

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

Defined in Control.Concurrent.RCU.GC.Internal

type Thread (RCU s) = RCUThread s

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

Run an RCU computation.

class Monad m => MonadNew s m | m -> s where Source #

Minimal complete definition

Nothing

Methods

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

Build a new shared reference

default newSRef :: (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 (IdentityT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

newSRef :: a -> IdentityT 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' (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 (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 (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' (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) (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

newSRef :: a -> WritingRCU 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) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

newSRef :: a -> RCU 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 #

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

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

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

class MonadNew s m => MonadReading s m | 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 :: (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 (IdentityT m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Methods

readSRef :: s a -> IdentityT 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' (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 (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 (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' (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) (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.GC.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 #

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

Defined in Control.Concurrent.RCU.QSBR.Internal

Methods

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

class MonadReading s m => MonadWriting s m | 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 :: (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 :: (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' (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 (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 (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' (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 m | m -> s where Source #

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

Associated Types

type Reading m :: * -> * Source #

A read-side critical section

type Writing m :: * -> * Source #

A write-side critical section

type Thread m :: * -> * 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) :: Type -> Type Source #

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

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

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, Monoid e) => MonadRCU s (WriterT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

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

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

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

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) :: Type -> Type Source #

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

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

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 => MonadRCU s (ExceptT e m) Source # 
Instance details

Defined in Control.Concurrent.RCU.Class

Associated Types

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

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

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

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) :: Type -> Type Source #

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

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

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

Defined in Control.Concurrent.RCU.Class

Associated Types

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

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

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

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 (SRef s) (RCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Associated Types

type Reading (RCU s) :: Type -> Type Source #

type Writing (RCU s) :: Type -> Type Source #

type Thread (RCU s) :: Type -> Type Source #

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) :: Type -> Type Source #

type Writing (RCU s) :: Type -> Type Source #

type Thread (RCU s) :: Type -> Type Source #

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
Monad (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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 #

Functor (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

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

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

MonadFail (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

fail :: String -> ReadingRCU s a #

Applicative (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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 #

Alternative (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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] #

MonadPlus (ReadingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

mzero :: ReadingRCU s a #

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

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

Defined in Control.Concurrent.RCU.GC.Internal

Methods

readSRef :: SRef s a -> ReadingRCU 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 #

data WritingRCU s a Source #

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

Instances

Instances details
Monad (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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 #

Functor (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

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

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

MonadFail (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

fail :: String -> WritingRCU s a #

Applicative (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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 #

Alternative (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.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] #

MonadPlus (WritingRCU s) Source # 
Instance details

Defined in Control.Concurrent.RCU.GC.Internal

Methods

mzero :: WritingRCU s a #

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

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 #

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

Defined in Control.Concurrent.RCU.GC.Internal

Methods

readSRef :: SRef s a -> WritingRCU 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 #

data RCUThread s a Source #

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