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 HaskellSafe
LanguageHaskell2010

Control.Concurrent.RCU.Class

Description

 
Synopsis

Documentation

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 #

copySRef :: MonadReading s m => s a -> m (s a) Source #

Copy a shared reference.