This module defines the "MRef" abstraction, which is a set of
type-classes for things that behave like Control.Concurrent.MVar.MVar
s.
See the documentation there for more info.
This interface may be subject to future expansion. Presently, rather
than providing something like Control.Concurrent.MVar.tryTakeMVar
,
instances for "Data.StateRef.Types.ReadRef
sr m (Maybe
a)" are
provided, giving Data.StateRef.Types.readReference
the same type
tryTakeMRef would have if it existed. There is currently nothing like
Control.Concurrent.MVar.tryPutMVar
, though. Perhaps there should be.
Or, perhaps this is the sort of thing the weird (to me) signature of
Data.IORef.atomicModifyIORef
is for, and an argument for a similar
signature for Data.StateRef.Types.modifyStateRef
or the addition of
a new atomicModifyStateRef function.
I would like to resolve these questions in version 0.3 of this package.
Documentation
class Monad m => NewMRef sr m a | sr -> a whereSource
newMReference :: a -> m srSource
See Control.Concurrent.MVar.newMVar
newEmptyMReference :: m srSource
See Control.Concurrent.MVar.newEmptyMVar
class Monad m => TakeMRef sr m a | sr -> a whereSource
takeMReference :: sr -> m aSource
See Control.Concurrent.MVar.takeMVar