stateref-0.3: Abstraction for things that work like IORef.

Safe HaskellSafe-Inferred

Data.MRef.Types

Description

This module defines the "MRef" abstraction, which is a set of type-classes for things that behave like MVars. See the documentation there for more info.

This interface may be subject to future expansion. Presently, rather than providing something like tryTakeMVar, instances for "ReadRef sr m (Maybe a)" are provided, giving readReference the same type tryTakeMRef would have if it existed. There is currently nothing like tryPutMVar, though. Perhaps there should be. Or, perhaps this is the sort of thing the weird (to me) signature of atomicModifyIORef is for, and an argument for a similar signature for modifyStateRef or the addition of a new atomicModifyStateRef function.

I would like to resolve these questions in version 0.3 of this package.

Documentation

data MRef m a where

Constructors

MRef :: (TakeMRef sr m a, PutMRef sr m a) => !sr -> MRef m a 

Instances

Monad IO => PutMRef (MRef STM a) IO a 
Monad IO => TakeMRef (MRef STM a) IO a 
Monad IO => NewMRef (MRef STM a) IO a 

class HasMRef m where

Methods

newMRef :: a -> m (MRef m a)

newEmptyMRef :: m (MRef m a)

Instances

class Monad m => NewMRef sr m a | sr -> a where

Methods

newMReference :: a -> m sr

See newMVar

newEmptyMReference :: m sr

Instances

Monad IO => NewMRef (TVar (Maybe a)) IO a 
Monad STM => NewMRef (TVar (Maybe a)) STM a 
(Monad m, MonadIO m) => NewMRef (MVar a) m a 
Monad IO => NewMRef (TMVar a) IO a 
Monad STM => NewMRef (TMVar a) STM a 
Monad IO => NewMRef (MRef STM a) IO a 

class Monad m => TakeMRef sr m a | sr -> a where

Methods

takeMReference :: sr -> m a

Instances

Monad IO => TakeMRef (TVar (Maybe a)) IO a 
Monad STM => TakeMRef (TVar (Maybe a)) STM a 
(Monad m, MonadIO m) => TakeMRef (MVar a) m a 
Monad IO => TakeMRef (TMVar a) IO a 
Monad STM => TakeMRef (TMVar a) STM a 
Monad IO => TakeMRef (MRef STM a) IO a 

class Monad m => PutMRef sr m a | sr -> a where

Methods

putMReference :: sr -> a -> m ()

See putMVar

Instances

Monad IO => PutMRef (TVar (Maybe a)) IO a 
Monad STM => PutMRef (TVar (Maybe a)) STM a 
(Monad m, MonadIO m) => PutMRef (MVar a) m a 
Monad IO => PutMRef (TMVar a) IO a 
Monad STM => PutMRef (TMVar a) STM a 
Monad IO => PutMRef (MRef STM a) IO a