rcu-0.2.2: Read-Copy-Update for Haskell

Copyright(C) 2015 Edward Kmett and Ted Cooper
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com> Ted Cooper <anthezium@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell2010

Control.Concurrent.RCU.Class

Description

 

Synopsis

Documentation

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

Methods

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

Build a new shared reference

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

Build a new shared reference

Instances

MonadNew s m => MonadNew s (MaybeT m) Source # 

Methods

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

MonadNew s m => MonadNew s (IdentityT * m) Source # 

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

MonadNew s m => MonadNew s (ReaderT * e m) Source # 

Methods

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

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

Methods

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

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

Methods

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

MonadNew (SRef s) (RCU s) Source # 

Methods

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

MonadNew (SRef s) (WritingRCU s) Source # 

Methods

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

MonadNew (SRef s) (ReadingRCU s) Source # 

Methods

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

MonadNew (SRef s) (RCU s) Source # 

Methods

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

MonadNew (SRef s) (WritingRCU s) Source # 

Methods

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

MonadNew (SRef s) (ReadingRCU s) Source # 

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

Methods

readSRef :: s a -> m a Source #

Read a shared reference.

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

Read a shared reference.

Instances

MonadReading s m => MonadReading s (MaybeT m) Source # 

Methods

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

MonadReading s m => MonadReading s (IdentityT * m) Source # 

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

MonadReading s m => MonadReading s (ReaderT * e m) Source # 

Methods

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

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

Methods

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

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

Methods

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

MonadReading (SRef s) (WritingRCU s) Source # 

Methods

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

MonadReading (SRef s) (ReadingRCU s) Source # 

Methods

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

MonadReading (SRef s) (WritingRCU s) Source # 

Methods

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

MonadReading (SRef s) (ReadingRCU s) Source # 

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

Methods

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

Write to a shared reference.

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

Write to a shared reference.

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!

synchronize :: (m ~ t n, MonadTrans t, MonadWriting s n) => 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!

Instances

MonadWriting s m => MonadWriting s (MaybeT m) Source # 

Methods

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

synchronize :: MaybeT m () Source #

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

Methods

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

synchronize :: ExceptT e m () Source #

MonadWriting s m => MonadWriting s (IdentityT * m) Source # 

Methods

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

synchronize :: IdentityT * m () Source #

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

Methods

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

synchronize :: StateT s m () Source #

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

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 # 

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 # 

Methods

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

synchronize :: WriterT w m () Source #

MonadWriting s m => MonadWriting s (ReaderT * e m) Source # 

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 # 

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 # 

Methods

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

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

MonadWriting (SRef s) (WritingRCU s) Source # 

Methods

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

synchronize :: WritingRCU s () Source #

MonadWriting (SRef s) (WritingRCU s) Source # 

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.

Minimal complete definition

forking, joining, reading, writing

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

MonadRCU s m => MonadRCU s (MaybeT m) Source # 

Associated Types

type Reading (MaybeT m :: * -> *) :: * -> * Source #

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

type Thread (MaybeT m :: * -> *) :: * -> * 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 # 

Associated Types

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

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

type Thread (WriterT e m :: * -> *) :: * -> * 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 # 

Associated Types

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

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

type Thread (WriterT e m :: * -> *) :: * -> * 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 # 

Associated Types

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

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

type Thread (ExceptT e m :: * -> *) :: * -> * 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 # 

Associated Types

type Reading (IdentityT * m :: * -> *) :: * -> * Source #

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

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

MonadRCU s m => MonadRCU s (ReaderT * e m) Source # 

Associated Types

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

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

type Thread (ReaderT * e m :: * -> *) :: * -> * 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 # 

Associated Types

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

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

type Thread (RCU s :: * -> *) :: * -> * 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 # 

Associated Types

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

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

type Thread (RCU s :: * -> *) :: * -> * 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 #

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

Copy a shared reference.