-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | STM-based Read-Copy-Update
--
-- STM-based Read-Copy-Update
@package rcu
@version 0
-- | STM-based RCU with concurrent writers
module Control.Concurrent.RCU.Internal
-- | Shared references
newtype SRef s a
[SRef] :: TVar a -> SRef s a
[unSRef] :: SRef s a -> TVar a
-- | This is a basic RCU thread. It may be embellished when running
-- in a more exotic context.
data RCUThread s a
[RCUThread] :: {-# UNPACK #-} !ThreadId -> {-# UNPACK #-} !(MVar a) -> RCUThread s a
[rcuThreadId] :: RCUThread s a -> {-# UNPACK #-} !ThreadId
[rcuThreadVar] :: RCUThread s a -> {-# UNPACK #-} !(MVar a)
-- | 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. Contention between multiple write-side
-- computations is managed by STM.
newtype RCU s a
[RCU] :: (TVar Int64 -> IO a) -> RCU s a
[unRCU] :: RCU s a -> TVar Int64 -> IO a
-- | Run an RCU computation.
runRCU :: (forall s. RCU s a) -> IO a
-- | This is the basic read-side critical section for an RCU computation
newtype ReadingRCU s a
[ReadingRCU] :: IO a -> ReadingRCU s a
[runReadingRCU] :: ReadingRCU s a -> IO a
-- | This is the basic write-side critical section for an RCU computation
newtype WritingRCU s a
[WritingRCU] :: (TVar Int64 -> STM a) -> WritingRCU s a
[runWritingRCU] :: WritingRCU s a -> TVar Int64 -> STM a
class Monad m => MonadNew s m | m -> s where newSRef a = lift (newSRef a)
newSRef :: MonadNew s m => a -> m (SRef s a)
-- | This is a read-side critical section
class MonadNew s m => MonadReading s m | m -> s where readSRef r = lift (readSRef r)
readSRef :: MonadReading s m => SRef s a -> m a
-- | Copy a shared reference.
copySRef :: MonadReading s m => SRef s a -> m (SRef s a)
-- | This is a write-side critical section
class MonadReading s m => MonadWriting s m | m -> s where writeSRef r a = lift (writeSRef r a) synchronize = lift synchronize
writeSRef :: MonadWriting s m => SRef s a -> a -> m ()
synchronize :: MonadWriting s m => m ()
-- | This is the executor service that can fork, join and execute critical
-- sections.
class (MonadReading s (Reading m), MonadWriting s (Writing m), MonadNew s m) => MonadRCU s m | m -> s where type family Reading m :: * -> * type family Writing m :: * -> * type family Thread m :: * -> *
forking :: MonadRCU s m => m a -> m (Thread m a)
joining :: MonadRCU s m => Thread m a -> m a
reading :: MonadRCU s m => Reading m a -> m a
writing :: MonadRCU s m => Writing m a -> m a
instance Functor (RCU s)
instance Functor (WritingRCU s)
instance Monad (ReadingRCU s)
instance Applicative (ReadingRCU s)
instance Functor (ReadingRCU s)
instance Eq (SRef s a)
instance MonadNew s m => MonadNew s (ReaderT e m)
instance (MonadNew s m, Monoid w) => MonadNew s (WriterT w m)
instance (MonadNew s m, Monoid w) => MonadNew s (WriterT w m)
instance MonadNew s' m => MonadNew s' (StateT s m)
instance MonadNew s' m => MonadNew s' (StateT s m)
instance (MonadNew s' m, Monoid w) => MonadNew s' (RWST r w s m)
instance (MonadNew s' m, Monoid w) => MonadNew s' (RWST r w s m)
instance MonadNew s m => MonadNew s (ExceptT e m)
instance MonadNew s m => MonadNew s (MaybeT m)
instance MonadNew s m => MonadNew s (IdentityT m)
instance MonadReading s m => MonadReading s (ReaderT e m)
instance (MonadReading s m, Monoid w) => MonadReading s (WriterT w m)
instance (MonadReading s m, Monoid w) => MonadReading s (WriterT w m)
instance MonadReading s' m => MonadReading s' (StateT s m)
instance MonadReading s' m => MonadReading s' (StateT s m)
instance (MonadReading s' m, Monoid w) => MonadReading s' (RWST r w s m)
instance (MonadReading s' m, Monoid w) => MonadReading s' (RWST r w s m)
instance MonadReading s m => MonadReading s (ExceptT e m)
instance MonadReading s m => MonadReading s (MaybeT m)
instance MonadReading s m => MonadReading s (IdentityT m)
instance MonadWriting s m => MonadWriting s (ReaderT e m)
instance (MonadWriting s m, Monoid w) => MonadWriting s (WriterT w m)
instance (MonadWriting s m, Monoid w) => MonadWriting s (WriterT w m)
instance MonadWriting s m => MonadWriting s (StateT s m)
instance MonadWriting s m => MonadWriting s (StateT s m)
instance (MonadWriting s m, Monoid w) => MonadWriting s (RWST r w s m)
instance (MonadWriting s m, Monoid w) => MonadWriting s (RWST r w s m)
instance MonadWriting s m => MonadWriting s (IdentityT m)
instance MonadWriting s m => MonadWriting s (ExceptT e m)
instance MonadWriting s m => MonadWriting s (MaybeT m)
instance MonadRCU s m => MonadRCU s (ReaderT e m)
instance MonadRCU s m => MonadRCU s (IdentityT m)
instance MonadRCU s m => MonadRCU s (ExceptT e m)
instance MonadRCU s m => MonadRCU s (MaybeT m)
instance (MonadRCU s m, Monoid e) => MonadRCU s (WriterT e m)
instance (MonadRCU s m, Monoid e) => MonadRCU s (WriterT e m)
instance MonadNew s (ReadingRCU s)
instance MonadReading s (ReadingRCU s)
instance Applicative (WritingRCU s)
instance Monad (WritingRCU s)
instance Alternative (WritingRCU s)
instance MonadPlus (WritingRCU s)
instance MonadNew s (WritingRCU s)
instance MonadReading s (WritingRCU s)
instance MonadWriting s (WritingRCU s)
instance Applicative (RCU s)
instance Monad (RCU s)
instance MonadNew s (RCU s)
instance MonadRCU s (RCU s)
instance MonadIO (RCU s)
module Control.Concurrent.RCU.Class
-- | Shared references
data SRef s a
class Monad m => MonadNew s m | m -> s where newSRef a = lift (newSRef a)
newSRef :: MonadNew s m => a -> m (SRef s a)
-- | This is a read-side critical section
class MonadNew s m => MonadReading s m | m -> s where readSRef r = lift (readSRef r)
readSRef :: MonadReading s m => SRef s a -> m a
-- | This is a write-side critical section
class MonadReading s m => MonadWriting s m | m -> s where writeSRef r a = lift (writeSRef r a) synchronize = lift synchronize
writeSRef :: MonadWriting s m => SRef s a -> a -> m ()
synchronize :: MonadWriting s m => m ()
-- | This is the executor service that can fork, join and execute critical
-- sections.
class (MonadReading s (Reading m), MonadWriting s (Writing m), MonadNew s m) => MonadRCU s m | m -> s where type family Reading m :: * -> * type family Writing m :: * -> * type family Thread m :: * -> *
forking :: MonadRCU s m => m a -> m (Thread m a)
joining :: MonadRCU s m => Thread m a -> m a
reading :: MonadRCU s m => Reading m a -> m a
writing :: MonadRCU s m => Writing m a -> m a
module Control.Concurrent.RCU
-- | Shared references
data SRef s a
-- | 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. Contention between multiple write-side
-- computations is managed by STM.
data RCU s a
-- | Run an RCU computation.
runRCU :: (forall s. RCU s a) -> IO a
class Monad m => MonadNew s m | m -> s where newSRef a = lift (newSRef a)
newSRef :: MonadNew s m => a -> m (SRef s a)
-- | This is a read-side critical section
class MonadNew s m => MonadReading s m | m -> s where readSRef r = lift (readSRef r)
readSRef :: MonadReading s m => SRef s a -> m a
-- | This is a write-side critical section
class MonadReading s m => MonadWriting s m | m -> s where writeSRef r a = lift (writeSRef r a) synchronize = lift synchronize
writeSRef :: MonadWriting s m => SRef s a -> a -> m ()
synchronize :: MonadWriting s m => m ()
-- | This is the executor service that can fork, join and execute critical
-- sections.
class (MonadReading s (Reading m), MonadWriting s (Writing m), MonadNew s m) => MonadRCU s m | m -> s where type family Reading m :: * -> * type family Writing m :: * -> * type family Thread m :: * -> *
forking :: MonadRCU s m => m a -> m (Thread m a)
joining :: MonadRCU s m => Thread m a -> m a
reading :: MonadRCU s m => Reading m a -> m a
writing :: MonadRCU s m => Writing m a -> m a
-- | This is the basic read-side critical section for an RCU computation
data ReadingRCU s a
-- | This is the basic write-side critical section for an RCU computation
data WritingRCU s a
-- | This is a basic RCU thread. It may be embellished when running
-- in a more exotic context.
data RCUThread s a