monad-var-0.1.2.0: Generic operations over variables

Safe HaskellSafe
LanguageHaskell2010

MonadVar

Synopsis

Documentation

class Monad m => MonadNew m v where Source #

A type class for containers that can be created and initialized with a single value.

Minimal complete definition

new

Methods

new :: a -> m (v a) Source #

Instances

MonadNew IO TVar Source # 

Methods

new :: a -> IO (TVar a) Source #

MonadNew IO IORef Source # 

Methods

new :: a -> IO (IORef a) Source #

MonadNew IO MVar Source # 

Methods

new :: a -> IO (MVar a) Source #

MonadNew IO TMVar Source # 

Methods

new :: a -> IO (TMVar a) Source #

MonadNew STM TVar Source # 

Methods

new :: a -> STM (TVar a) Source #

MonadNew STM TMVar Source # 

Methods

new :: a -> STM (TMVar a) Source #

MonadNew (ST s) (STRef s) Source # 

Methods

new :: a -> ST s (STRef s a) Source #

class (MonadRead m v, Monad m) => MonadLock m v where Source #

A type class for at most one element containers. An attempt to get a value from an empty container or to put a value into a full container results in a block. I.e. this is a type class for MVar-like things.

Minimal complete definition

hold, fill, tryHold, tryFill, tryRead, newEmpty, isEmpty

Methods

hold :: v a -> m a Source #

Get a value from a container. Block on empty. A la takeMVar.

fill :: v a -> a -> m () Source #

Put a value to a container. Block on full. A la putMVar.

tryHold :: v a -> m (Maybe a) Source #

Get a value from a container. Return Nothing on empty. A la tryTakeMVar.

tryFill :: v a -> a -> m Bool Source #

Put a value to a container. Return Nothing on full. A la tryPutMVar.

tryRead :: v a -> m (Maybe a) Source #

Read a value from a container. Return Nothing on empty. A la tryReadMVar.

newEmpty :: m (v a) Source #

Create an empty container. A la newEmptyMVar.

isEmpty :: v a -> m Bool Source #

Check whether a container is empty. A la isEmptyMVar.

Instances

MonadLock IO MVar Source # 

Methods

hold :: MVar a -> IO a Source #

fill :: MVar a -> a -> IO () Source #

tryHold :: MVar a -> IO (Maybe a) Source #

tryFill :: MVar a -> a -> IO Bool Source #

tryRead :: MVar a -> IO (Maybe a) Source #

newEmpty :: IO (MVar a) Source #

isEmpty :: MVar a -> IO Bool Source #

MonadLock IO TMVar Source # 

Methods

hold :: TMVar a -> IO a Source #

fill :: TMVar a -> a -> IO () Source #

tryHold :: TMVar a -> IO (Maybe a) Source #

tryFill :: TMVar a -> a -> IO Bool Source #

tryRead :: TMVar a -> IO (Maybe a) Source #

newEmpty :: IO (TMVar a) Source #

isEmpty :: TMVar a -> IO Bool Source #

MonadLock STM TMVar Source # 

Methods

hold :: TMVar a -> STM a Source #

fill :: TMVar a -> a -> STM () Source #

tryHold :: TMVar a -> STM (Maybe a) Source #

tryFill :: TMVar a -> a -> STM Bool Source #

tryRead :: TMVar a -> STM (Maybe a) Source #

newEmpty :: STM (TMVar a) Source #

isEmpty :: TMVar a -> STM Bool Source #

(MonadTrans t, Monad (t m), MonadLock m v) => MonadLock (t m) v Source # 

Methods

hold :: v a -> t m a Source #

fill :: v a -> a -> t m () Source #

tryHold :: v a -> t m (Maybe a) Source #

tryFill :: v a -> a -> t m Bool Source #

tryRead :: v a -> t m (Maybe a) Source #

newEmpty :: t m (v a) Source #

isEmpty :: v a -> t m Bool Source #

class Monad m => MonadRead m v where Source #

A type class for containers from which a single value can be read.

Minimal complete definition

read

Methods

read :: v a -> m a Source #

Instances

MonadRead IO TVar Source # 

Methods

read :: TVar a -> IO a Source #

MonadRead IO IORef Source # 

Methods

read :: IORef a -> IO a Source #

MonadRead IO MVar Source # 

Methods

read :: MVar a -> IO a Source #

MonadRead IO TMVar Source # 

Methods

read :: TMVar a -> IO a Source #

MonadRead STM TVar Source # 

Methods

read :: TVar a -> STM a Source #

MonadRead STM TMVar Source # 

Methods

read :: TMVar a -> STM a Source #

(MonadTrans t, Monad (t m), MonadRead m v) => MonadRead (t m) v Source # 

Methods

read :: v a -> t m a Source #

MonadRead (ST s) (STRef s) Source # 

Methods

read :: STRef s a -> ST s a Source #

class Monad m => MonadWrite m v where Source #

A type class for containers to which a single value can be written.

Minimal complete definition

write

Methods

write :: v a -> a -> m () Source #

Instances

MonadWrite IO TVar Source # 

Methods

write :: TVar a -> a -> IO () Source #

MonadWrite IO IORef Source # 

Methods

write :: IORef a -> a -> IO () Source #

MonadWrite IO MVar Source # 

Methods

write :: MVar a -> a -> IO () Source #

MonadWrite IO TMVar Source # 

Methods

write :: TMVar a -> a -> IO () Source #

MonadWrite STM TVar Source # 

Methods

write :: TVar a -> a -> STM () Source #

MonadWrite STM TMVar Source # 

Methods

write :: TMVar a -> a -> STM () Source #

(MonadTrans t, Monad (t m), MonadWrite m v) => MonadWrite (t m) v Source # 

Methods

write :: v a -> a -> t m () Source #

MonadWrite (ST s) (STRef s) Source # 

Methods

write :: STRef s a -> a -> ST s () Source #

class Monad m => MonadSwap m v where Source #

A type class for containers for which one value can be replaced with an another (not necessarily at the same position).

Minimal complete definition

swap

Methods

swap :: v a -> a -> m a Source #

Replace a value from a container by a new one and return the original value.

Instances

MonadSwap IO TVar Source # 

Methods

swap :: TVar a -> a -> IO a Source #

MonadSwap IO IORef Source # 

Methods

swap :: IORef a -> a -> IO a Source #

MonadSwap IO MVar Source # 

Methods

swap :: MVar a -> a -> IO a Source #

MonadSwap IO TMVar Source # 

Methods

swap :: TMVar a -> a -> IO a Source #

MonadSwap STM TVar Source # 

Methods

swap :: TVar a -> a -> STM a Source #

MonadSwap STM TMVar Source # 

Methods

swap :: TMVar a -> a -> STM a Source #

(MonadTrans t, Monad (t m), MonadSwap m v) => MonadSwap (t m) v Source # 

Methods

swap :: v a -> a -> t m a Source #

MonadSwap (ST s) (STRef s) Source # 

Methods

swap :: STRef s a -> a -> ST s a Source #

class MonadWrite m v => MonadMutate_ m v where Source #

A type class for mutable containers which can be mapped over.

Minimal complete definition

mutate_

Methods

mutate_ :: v a -> (a -> a) -> m () Source #

Instances

MonadMutate_ IO TVar Source # 

Methods

mutate_ :: TVar a -> (a -> a) -> IO () Source #

MonadMutate_ IO IORef Source # 

Methods

mutate_ :: IORef a -> (a -> a) -> IO () Source #

MonadMutate_ IO MVar Source # 

Methods

mutate_ :: MVar a -> (a -> a) -> IO () Source #

MonadMutate_ IO TMVar Source # 

Methods

mutate_ :: TMVar a -> (a -> a) -> IO () Source #

MonadMutate_ STM TVar Source # 

Methods

mutate_ :: TVar a -> (a -> a) -> STM () Source #

MonadMutate_ STM TMVar Source # 

Methods

mutate_ :: TMVar a -> (a -> a) -> STM () Source #

(MonadTrans t, Monad (t m), MonadMutate_ m v) => MonadMutate_ (t m) v Source # 

Methods

mutate_ :: v a -> (a -> a) -> t m () Source #

MonadMutate_ (ST s) (STRef s) Source # 

Methods

mutate_ :: STRef s a -> (a -> a) -> ST s () Source #

class (MonadRead m v, MonadMutate_ m v) => MonadMutate m v where Source #

A type class for one-element containers which can be mapped and folded over simultaneously. These are basically variables.

Minimal complete definition

mutate

Methods

mutate :: v a -> (a -> (a, b)) -> m b Source #

Mutate a variable and return an additional value.

Instances

MonadMutate IO TVar Source # 

Methods

mutate :: TVar a -> (a -> (a, b)) -> IO b Source #

MonadMutate IO IORef Source # 

Methods

mutate :: IORef a -> (a -> (a, b)) -> IO b Source #

MonadMutate IO MVar Source # 

Methods

mutate :: MVar a -> (a -> (a, b)) -> IO b Source #

MonadMutate IO TMVar Source # 

Methods

mutate :: TMVar a -> (a -> (a, b)) -> IO b Source #

MonadMutate STM TVar Source # 

Methods

mutate :: TVar a -> (a -> (a, b)) -> STM b Source #

MonadMutate STM TMVar Source # 

Methods

mutate :: TMVar a -> (a -> (a, b)) -> STM b Source #

(MonadTrans t, Monad (t m), MonadMutate m v) => MonadMutate (t m) v Source # 

Methods

mutate :: v a -> (a -> (a, b)) -> t m b Source #

MonadMutate (ST s) (STRef s) Source # 

Methods

mutate :: STRef s a -> (a -> (a, b)) -> ST s b Source #

class MonadFoldMutate m v where Source #

A type class for mutable containers which can be mapped and folded over simultaneously.

Minimal complete definition

foldMutate

Methods

foldMutate :: Monoid b => v a -> (a -> (a, b)) -> m b Source #

class MonadMutate_ m v => MonadMutateM_ f m v where Source #

A type class for mutable containers which can be monadically mapped over.

Minimal complete definition

mutateM_

Methods

mutateM_ :: v a -> (a -> f a) -> m () Source #

Instances

MonadMutateM_ IO IO TMVar Source # 

Methods

mutateM_ :: TMVar a -> (a -> IO a) -> IO () Source #

(~) (* -> *) STM stm => MonadMutateM_ stm STM TMVar Source # 

Methods

mutateM_ :: TMVar a -> (a -> stm a) -> STM () Source #

(~) (* -> *) STM stm => MonadMutateM_ stm IO TVar Source # 

Methods

mutateM_ :: TVar a -> (a -> stm a) -> IO () Source #

(~) (* -> *) STM stm => MonadMutateM_ stm STM TVar Source # 

Methods

mutateM_ :: TVar a -> (a -> stm a) -> STM () Source #

(~) (* -> *) IO io => MonadMutateM_ io IO MVar Source # 

Methods

mutateM_ :: MVar a -> (a -> io a) -> IO () Source #

(~) (* -> *) IO io => MonadMutateM_ io IO IORef Source # 

Methods

mutateM_ :: IORef a -> (a -> io a) -> IO () Source #

MonadMutateM_ STM IO TMVar Source # 

Methods

mutateM_ :: TMVar a -> (a -> STM a) -> IO () Source #

(~) (* -> *) (ST s) st_s => MonadMutateM_ st_s (ST s) (STRef s) Source # 

Methods

mutateM_ :: STRef s a -> (a -> st_s a) -> ST s () Source #

class (MonadMutate m v, MonadMutateM_ f m v) => MonadMutateM f m v where Source #

A type class for one-element containers which can be monadically mapped and folded over simultaneously. These are basically variables.

Minimal complete definition

mutateM

Methods

mutateM :: v a -> (a -> f (a, b)) -> m b Source #

Monadically mutate a variable and return an additional value.

Instances

MonadMutateM IO IO TMVar Source # 

Methods

mutateM :: TMVar a -> (a -> IO (a, b)) -> IO b Source #

(~) (* -> *) STM stm => MonadMutateM stm STM TMVar Source # 

Methods

mutateM :: TMVar a -> (a -> stm (a, b)) -> STM b Source #

(~) (* -> *) STM stm => MonadMutateM stm IO TVar Source # 

Methods

mutateM :: TVar a -> (a -> stm (a, b)) -> IO b Source #

(~) (* -> *) STM stm => MonadMutateM stm STM TVar Source # 

Methods

mutateM :: TVar a -> (a -> stm (a, b)) -> STM b Source #

(~) (* -> *) IO io => MonadMutateM io IO MVar Source # 

Methods

mutateM :: MVar a -> (a -> io (a, b)) -> IO b Source #

(~) (* -> *) IO io => MonadMutateM io IO IORef Source # 

Methods

mutateM :: IORef a -> (a -> io (a, b)) -> IO b Source #

MonadMutateM STM IO TMVar Source # 

Methods

mutateM :: TMVar a -> (a -> STM (a, b)) -> IO b Source #

(~) (* -> *) (ST s) st_s => MonadMutateM st_s (ST s) (STRef s) Source # 

Methods

mutateM :: STRef s a -> (a -> st_s (a, b)) -> ST s b Source #

class MonadFoldMutateM m n v where Source #

A type class for mutable containers which can be monadically mapped and folded over simultaneously.

Minimal complete definition

foldMutateM

Methods

foldMutateM :: Monoid b => v a -> (a -> m (a, b)) -> n b Source #

defaultLockUnsafeWrite :: MonadLock m v => v a -> a -> m () Source #

Default exception-unsafe write for MonadLock entities.

defaultReadWriteSwap :: (MonadRead m v, MonadWrite m v) => v a -> a -> m a Source #

Default swap for MonadRead and MonadWrite entities.

defaultLockUnsafeSwap :: MonadLock m v => v a -> a -> m a Source #

Default exception-unsafe swap for MonadLock entities.

defaultReadWriteMutate_ :: (MonadRead m v, MonadWrite m v) => v a -> (a -> a) -> m () Source #

Default mutate_ for MonadRead and MonadWrite entities.

defaultReadWriteMutate :: (MonadRead m v, MonadWrite m v) => v a -> (a -> (a, b)) -> m b Source #

Default mutate for MonadRead and MonadWrite entities.

defaultReadWriteMutateM_ :: (MonadRead m v, MonadWrite m v) => v a -> (a -> m a) -> m () Source #

Default mutateM_ for MonadRead and MonadWrite entities.

defaultReadWriteMutateM :: (MonadRead m v, MonadWrite m v) => v a -> (a -> m (a, b)) -> m b Source #

Default mutateM for MonadRead and MonadWrite entities.

defaultLockUnsafeMutate_ :: MonadLock m v => v a -> (a -> a) -> m () Source #

Default exception-unsafe mutate_ for MonadLock entities.

defaultLockUnsafeMutate :: MonadLock m v => v a -> (a -> (a, b)) -> m b Source #

Default exception-unsafe mutate for MonadLock entities.

defaultLockUnsafeMutateM_ :: MonadLock m v => v a -> (a -> m a) -> m () Source #

Default exception-unsafe mutateM_ for MonadLock entities.

defaultLockUnsafeMutateM :: MonadLock m v => v a -> (a -> m (a, b)) -> m b Source #

Default exception-unsafe mutateM for MonadLock entities.

defaultLockIOMutateM_ :: MonadLock IO v => v a -> (a -> IO a) -> IO () Source #

Default mutateM_ for MonadLock IO entities

defaultLockIOMutateM :: MonadLock IO v => v a -> (a -> IO (a, b)) -> IO b Source #

Default mutateM for MonadLock IO entities.

postMutate_ :: MonadMutate m v => v a -> (a -> a) -> m a Source #

Mutate a variable and also return its old value.

preMutate_ :: MonadMutate m v => v a -> (a -> a) -> m a Source #

Mutate a variable and also return its new value.

postMutate :: MonadMutate m v => v a -> (a -> (a, b)) -> m (a, b) Source #

Mutate a variable and also return its old value along with an additional value.

preMutate :: MonadMutate m v => v a -> (a -> (a, b)) -> m (a, b) Source #

Mutate a variable and also return its new value along with an additional value.

postMutateM_ :: (MonadMutateM f m v, Functor f) => v a -> (a -> f a) -> m a Source #

Monadically mutate a variable and also return its old value.

preMutateM_ :: (MonadMutateM f m v, Functor f) => v a -> (a -> f a) -> m a Source #

Monadically mutate a variable and also return its new value.

postMutateM :: (MonadMutateM f m v, Functor f) => v a -> (a -> f (a, b)) -> m (a, b) Source #

Monadically mutate a variable and also return its old value along with an additional value.

preMutateM :: (MonadMutateM f m v, Functor f) => v a -> (a -> f (a, b)) -> m (a, b) Source #

Monadically mutate a variable and also return its new value along with an additional value.