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

Safe HaskellSafe
LanguageHaskell98

Data.StateRef.Instances

Contents

Description

This module exports no new symbols of its own. It defines several basic class instances for creating, reading, and writing standard reference types, and re-exports the types for which it defines instances.

TODO: add millions of SPECIALIZE INSTANCE pragmas, for IO monad at a minimum.

Synopsis

Documentation

data IORef a #

A mutable variable in the IO monad

Instances
Eq (IORef a)

^ Pointer equality.

Since: base-4.1.0.0

Instance details

Defined in GHC.IORef

Methods

(==) :: IORef a -> IORef a -> Bool #

(/=) :: IORef a -> IORef a -> Bool #

MonadIO m => NewRef (IORef a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> m (IORef a) #

MonadIO m => ModifyRef (IORef a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

atomicModifyReference :: IORef a -> (a -> (a, b)) -> m b #

modifyReference :: IORef a -> (a -> a) -> m () #

MonadIO m => ReadRef (IORef a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: IORef a -> m a #

MonadIO m => WriteRef (IORef a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: IORef a -> a -> m () #

data MVar a #

An MVar (pronounced "em-var") is a synchronising variable, used for communication between concurrent threads. It can be thought of as a box, which may be empty or full.

Instances
Eq (MVar a)

Since: base-4.1.0.0

Instance details

Defined in GHC.MVar

Methods

(==) :: MVar a -> MVar a -> Bool #

(/=) :: MVar a -> MVar a -> Bool #

MonadIO m => PutMRef (MVar a) m a # 
Instance details

Defined in Data.MRef.Instances

Methods

putMReference :: MVar a -> a -> m () #

MonadIO m => TakeMRef (MVar a) m a # 
Instance details

Defined in Data.MRef.Instances

Methods

takeMReference :: MVar a -> m a #

MonadIO m => NewMRef (MVar a) m a # 
Instance details

Defined in Data.MRef.Instances

Methods

newMReference :: a -> m (MVar a) #

newEmptyMReference :: m (MVar a) #

MonadIO m => NewRef (MVar a) m (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: Maybe a -> m (MVar a) #

class Monad m => MonadIO (m :: Type -> Type) where #

Monads in which IO computations may be embedded. Any monad built by applying a sequence of monad transformers to the IO monad will be an instance of this class.

Instances should satisfy the following laws, which state that liftIO is a transformer of monads:

Methods

liftIO :: IO a -> m a #

Lift a computation from the IO monad.

Instances
MonadIO IO

Since: base-4.9.0.0

Instance details

Defined in Control.Monad.IO.Class

Methods

liftIO :: IO a -> IO a #

data STRef s a #

a value of type STRef s a is a mutable variable in state thread s, containing a value of type a

>>> :{
runST (do
    ref <- newSTRef "hello"
    x <- readSTRef ref
    writeSTRef ref (x ++ "world")
    readSTRef ref )
:}
"helloworld"
Instances
Eq (STRef s a)

Pointer equality.

Since: base-2.1

Instance details

Defined in GHC.STRef

Methods

(==) :: STRef s a -> STRef s a -> Bool #

(/=) :: STRef s a -> STRef s a -> Bool #

NewRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> IO (STRef RealWorld a) #

ModifyRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

atomicModifyReference :: STRef RealWorld a -> (a -> (a, b)) -> IO b #

modifyReference :: STRef RealWorld a -> (a -> a) -> IO () #

ReadRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: STRef RealWorld a -> IO a #

WriteRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: STRef RealWorld a -> a -> IO () #

NewRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> ST s (STRef s a) #

NewRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> ST s (STRef s a) #

ModifyRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

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

modifyReference :: STRef s a -> (a -> a) -> ST s () #

ModifyRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

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

modifyReference :: STRef s a -> (a -> a) -> ST s () #

ReadRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: STRef s a -> ST s a #

ReadRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: STRef s a -> ST s a #

WriteRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: STRef s a -> a -> ST s () #

WriteRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: STRef s a -> a -> ST s () #

data ST s a #

The strict state-transformer monad. A computation of type ST s a transforms an internal state indexed by s, and returns a value of type a. The s parameter is either

  • an uninstantiated type variable (inside invocations of runST), or
  • RealWorld (inside invocations of stToIO).

It serves to keep the internal states of different invocations of runST separate from each other and from invocations of stToIO.

The >>= and >> operations are strict in the state (though not in values stored in the state). For example,

runST (writeSTRef _|_ v >>= f) = _|_
Instances
Monad (ST s)

Since: base-2.1

Instance details

Defined in GHC.ST

Methods

(>>=) :: ST s a -> (a -> ST s b) -> ST s b #

(>>) :: ST s a -> ST s b -> ST s b #

return :: a -> ST s a #

fail :: String -> ST s a #

Functor (ST s)

Since: base-2.1

Instance details

Defined in GHC.ST

Methods

fmap :: (a -> b) -> ST s a -> ST s b #

(<$) :: a -> ST s b -> ST s a #

MonadFail (ST s)

Since: base-4.11.0.0

Instance details

Defined in GHC.ST

Methods

fail :: String -> ST s a #

Applicative (ST s)

Since: base-4.4.0.0

Instance details

Defined in GHC.ST

Methods

pure :: a -> ST s a #

(<*>) :: ST s (a -> b) -> ST s a -> ST s b #

liftA2 :: (a -> b -> c) -> ST s a -> ST s b -> ST s c #

(*>) :: ST s a -> ST s b -> ST s b #

(<*) :: ST s a -> ST s b -> ST s a #

HasRef (ST s) # 
Instance details

Defined in Data.StateRef.Instances

Methods

newRef :: a -> ST s (Ref (ST s) a) #

Show (ST s a)

Since: base-2.1

Instance details

Defined in GHC.ST

Methods

showsPrec :: Int -> ST s a -> ShowS #

show :: ST s a -> String #

showList :: [ST s a] -> ShowS #

Semigroup a => Semigroup (ST s a)

Since: base-4.11.0.0

Instance details

Defined in GHC.ST

Methods

(<>) :: ST s a -> ST s a -> ST s a #

sconcat :: NonEmpty (ST s a) -> ST s a #

stimes :: Integral b => b -> ST s a -> ST s a #

Monoid a => Monoid (ST s a)

Since: base-4.11.0.0

Instance details

Defined in GHC.ST

Methods

mempty :: ST s a #

mappend :: ST s a -> ST s a -> ST s a #

mconcat :: [ST s a] -> ST s a #

Monad m => NewRef (ST s a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> m (ST s a) #

MonadIO m => ReadRef (ST RealWorld a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: ST RealWorld a -> m a #

NewRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> ST s (STRef s a) #

ModifyRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

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

modifyReference :: STRef s a -> (a -> a) -> ST s () #

ReadRef (ST s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: ST s a -> ST s a #

ReadRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: STRef s a -> ST s a #

WriteRef (STRef s a) (ST s) a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: STRef s a -> a -> ST s () #

data RealWorld :: Type #

RealWorld is deeply magical. It is primitive, but it is not unlifted (hence ptrArg). We never manipulate values of type RealWorld; it's only used in the type system, to parameterise State#.

Instances
NewRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> IO (STRef RealWorld a) #

ModifyRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

atomicModifyReference :: STRef RealWorld a -> (a -> (a, b)) -> IO b #

modifyReference :: STRef RealWorld a -> (a -> a) -> IO () #

MonadIO m => ReadRef (ST RealWorld a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: ST RealWorld a -> m a #

ReadRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: STRef RealWorld a -> IO a #

WriteRef (STRef RealWorld a) IO a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: STRef RealWorld a -> a -> IO () #

data ForeignPtr a #

The type ForeignPtr represents references to objects that are maintained in a foreign language, i.e., that are not part of the data structures usually managed by the Haskell storage manager. The essential difference between ForeignPtrs and vanilla memory references of type Ptr a is that the former may be associated with finalizers. A finalizer is a routine that is invoked when the Haskell storage manager detects that - within the Haskell heap and stack - there are no more references left that are pointing to the ForeignPtr. Typically, the finalizer will, then, invoke routines in the foreign language that free the resources bound by the foreign object.

The ForeignPtr is parameterised in the same way as Ptr. The type argument of ForeignPtr should normally be an instance of class Storable.

Instances
Eq (ForeignPtr a)

Since: base-2.1

Instance details

Defined in GHC.ForeignPtr

Methods

(==) :: ForeignPtr a -> ForeignPtr a -> Bool #

(/=) :: ForeignPtr a -> ForeignPtr a -> Bool #

Ord (ForeignPtr a)

Since: base-2.1

Instance details

Defined in GHC.ForeignPtr

Show (ForeignPtr a)

Since: base-2.1

Instance details

Defined in GHC.ForeignPtr

(Storable a, MonadIO m) => NewRef (ForeignPtr a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

newReference :: a -> m (ForeignPtr a) #

(Storable a, MonadIO m) => ModifyRef (ForeignPtr a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

atomicModifyReference :: ForeignPtr a -> (a -> (a, b)) -> m b #

modifyReference :: ForeignPtr a -> (a -> a) -> m () #

(Storable a, MonadIO m) => ReadRef (ForeignPtr a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

readReference :: ForeignPtr a -> m a #

(Storable a, MonadIO m) => WriteRef (ForeignPtr a) m a # 
Instance details

Defined in Data.StateRef.Instances

Methods

writeReference :: ForeignPtr a -> a -> m () #

data STM a #

A monad supporting atomic memory transactions.

Instances
Monad STM

Since: base-4.3.0.0

Instance details

Defined in GHC.Conc.Sync

Methods

(>>=) :: STM a -> (a -> STM b) -> STM b #

(>>) :: STM a -> STM b -> STM b #

return :: a -> STM a #

fail :: String -> STM a #

Functor STM

Since: base-4.3.0.0

Instance details

Defined in GHC.Conc.Sync

Methods

fmap :: (a -> b) -> STM a -> STM b #

(<$) :: a -> STM b -> STM a #

Applicative STM

Since: base-4.8.0.0

Instance details

Defined in GHC.Conc.Sync

Methods

pure :: a -> STM a #

(<*>) :: STM (a -> b) -> STM a -> STM b #

liftA2 :: (a -> b -> c) -> STM a -> STM b -> STM c #

(*>) :: STM a -> STM b -> STM b #

(<*) :: STM a -> STM b -> STM a #

Alternative STM

Since: base-4.8.0.0

Instance details

Defined in GHC.Conc.Sync

Methods

empty :: STM a #

(<|>) :: STM a -> STM a -> STM a #

some :: STM a -> STM [a] #

many :: STM a -> STM [a] #

MonadPlus STM

Since: base-4.3.0.0

Instance details

Defined in GHC.Conc.Sync

Methods

mzero :: STM a #

mplus :: STM a -> STM a -> STM a #

HasMRef STM # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

newMRef :: a -> STM (MRef STM a) #

newEmptyMRef :: STM (MRef STM a) #

HasRef STM # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newRef :: a -> STM (Ref STM a) #

MArray TArray e STM 
Instance details

Defined in Control.Concurrent.STM.TArray

Methods

getBounds :: Ix i => TArray i e -> STM (i, i) #

getNumElements :: Ix i => TArray i e -> STM Int

newArray :: Ix i => (i, i) -> e -> STM (TArray i e) #

newArray_ :: Ix i => (i, i) -> STM (TArray i e) #

unsafeNewArray_ :: Ix i => (i, i) -> STM (TArray i e)

unsafeRead :: Ix i => TArray i e -> Int -> STM e

unsafeWrite :: Ix i => TArray i e -> Int -> e -> STM ()

PutMRef (TVar (Maybe a)) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: TVar (Maybe a) -> a -> STM () #

PutMRef (TMVar a) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: TMVar a -> a -> STM () #

TakeMRef (TVar (Maybe a)) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: TVar (Maybe a) -> STM a #

TakeMRef (TMVar a) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: TMVar a -> STM a #

NewMRef (TVar (Maybe a)) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

newMReference :: a -> STM (TVar (Maybe a)) #

newEmptyMReference :: STM (TVar (Maybe a)) #

NewMRef (TMVar a) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

NewRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: a -> STM (TVar a) #

ModifyRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

atomicModifyReference :: TVar a -> (a -> (a, b)) -> STM b #

modifyReference :: TVar a -> (a -> a) -> STM () #

MonadIO m => ReadRef (STM a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: STM a -> m a #

ReadRef (STM a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: STM a -> STM a #

ReadRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: TVar a -> STM a #

WriteRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

writeReference :: TVar a -> a -> STM () #

NewRef (TMVar a) STM (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: Maybe a -> STM (TMVar a) #

ReadRef (TMVar a) STM (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: TMVar a -> STM (Maybe a) #

PutMRef (MRef STM a) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: MRef STM a -> a -> IO () #

TakeMRef (MRef STM a) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: MRef STM a -> IO a #

NewMRef (MRef STM a) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

newMReference :: a -> IO (MRef STM a) #

newEmptyMReference :: IO (MRef STM a) #

MonadIO m => NewRef (Ref STM a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: a -> m (Ref STM a) #

MonadIO m => ModifyRef (Ref STM a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

atomicModifyReference :: Ref STM a -> (a -> (a, b)) -> m b #

modifyReference :: Ref STM a -> (a -> a) -> m () #

MonadIO m => ReadRef (Ref STM a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: Ref STM a -> m a #

MonadIO m => WriteRef (Ref STM a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

writeReference :: Ref STM a -> a -> m () #

data TVar a #

Shared memory locations that support atomic memory transactions.

Instances
Eq (TVar a)

Since: base-4.8.0.0

Instance details

Defined in GHC.Conc.Sync

Methods

(==) :: TVar a -> TVar a -> Bool #

(/=) :: TVar a -> TVar a -> Bool #

PutMRef (TVar (Maybe a)) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: TVar (Maybe a) -> a -> IO () #

PutMRef (TVar (Maybe a)) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: TVar (Maybe a) -> a -> STM () #

TakeMRef (TVar (Maybe a)) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: TVar (Maybe a) -> IO a #

TakeMRef (TVar (Maybe a)) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: TVar (Maybe a) -> STM a #

NewMRef (TVar (Maybe a)) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

newMReference :: a -> IO (TVar (Maybe a)) #

newEmptyMReference :: IO (TVar (Maybe a)) #

NewMRef (TVar (Maybe a)) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

newMReference :: a -> STM (TVar (Maybe a)) #

newEmptyMReference :: STM (TVar (Maybe a)) #

MonadIO m => NewRef (TVar a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: a -> m (TVar a) #

NewRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: a -> STM (TVar a) #

MonadIO m => ModifyRef (TVar a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

atomicModifyReference :: TVar a -> (a -> (a, b)) -> m b #

modifyReference :: TVar a -> (a -> a) -> m () #

ModifyRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

atomicModifyReference :: TVar a -> (a -> (a, b)) -> STM b #

modifyReference :: TVar a -> (a -> a) -> STM () #

MonadIO m => ReadRef (TVar a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: TVar a -> m a #

ReadRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: TVar a -> STM a #

MonadIO m => WriteRef (TVar a) m a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

writeReference :: TVar a -> a -> m () #

WriteRef (TVar a) STM a # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

writeReference :: TVar a -> a -> STM () #

data TMVar a #

A TMVar is a synchronising variable, used for communication between concurrent threads. It can be thought of as a box, which may be empty or full.

Instances
Eq (TMVar a) 
Instance details

Defined in Control.Concurrent.STM.TMVar

Methods

(==) :: TMVar a -> TMVar a -> Bool #

(/=) :: TMVar a -> TMVar a -> Bool #

PutMRef (TMVar a) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: TMVar a -> a -> IO () #

PutMRef (TMVar a) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

putMReference :: TMVar a -> a -> STM () #

TakeMRef (TMVar a) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: TMVar a -> IO a #

TakeMRef (TMVar a) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

takeMReference :: TMVar a -> STM a #

NewMRef (TMVar a) IO a # 
Instance details

Defined in Data.MRef.Instances.STM

Methods

newMReference :: a -> IO (TMVar a) #

newEmptyMReference :: IO (TMVar a) #

NewMRef (TMVar a) STM a # 
Instance details

Defined in Data.MRef.Instances.STM

MonadIO m => NewRef (TMVar a) m (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: Maybe a -> m (TMVar a) #

NewRef (TMVar a) STM (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

newReference :: Maybe a -> STM (TMVar a) #

MonadIO m => ReadRef (TMVar a) m (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: TMVar a -> m (Maybe a) #

ReadRef (TMVar a) STM (Maybe a) # 
Instance details

Defined in Data.StateRef.Instances.STM

Methods

readReference :: TMVar a -> STM (Maybe a) #

atomically :: STM a -> IO a #

Perform a series of STM actions atomically.

Using atomically inside an unsafePerformIO or unsafeInterleaveIO subverts some of guarantees that STM provides. It makes it possible to run a transaction inside of another transaction, depending on when the thunk is evaluated. If a nested transaction is attempted, an exception is thrown by the runtime. It is possible to safely use atomically inside unsafePerformIO or unsafeInterleaveIO, but the typechecker does not rule out programs that may attempt nested transactions, meaning that the programmer must take special care to prevent these.

However, there are functions for creating transactional variables that can always be safely called in unsafePerformIO. See: newTVarIO, newTChanIO, newBroadcastTChanIO, newTQueueIO, newTBQueueIO, and newTMVarIO.

Using unsafePerformIO inside of atomically is also dangerous but for different reasons. See unsafeIOToSTM for more on this.

newtype UnsafeModifyRef sr #

Wrap a state reference that supports reading and writing, and add a potentially thread-unsafe ModifyRef instance.

Constructors

UnsafeModifyRef sr 
Instances
(Monad m, ReadRef sr m a, WriteRef sr m a) => ModifyRef (UnsafeModifyRef sr) m a # 
Instance details

Defined in Data.StateRef.Instances.Undecidable

Methods

atomicModifyReference :: UnsafeModifyRef sr -> (a -> (a, b)) -> m b #

modifyReference :: UnsafeModifyRef sr -> (a -> a) -> m () #

ReadRef sr m a => ReadRef (UnsafeModifyRef sr) m a # 
Instance details

Defined in Data.StateRef.Instances.Undecidable

Methods

readReference :: UnsafeModifyRef sr -> m a #

WriteRef sr m a => WriteRef (UnsafeModifyRef sr) m a # 
Instance details

Defined in Data.StateRef.Instances.Undecidable

Methods

writeReference :: UnsafeModifyRef sr -> a -> m () #

Orphan instances

HasRef IO # 
Instance details

Methods

newRef :: a -> IO (Ref IO a) #

HasRef (ST s) # 
Instance details

Methods

newRef :: a -> ST s (Ref (ST s) a) #

HasRef (ST s) # 
Instance details

Methods

newRef :: a -> ST s (Ref (ST s) a) #

Monad m => NewRef (IO a) m a # 
Instance details

Methods

newReference :: a -> m (IO a) #

(Storable a, MonadIO m) => NewRef (ForeignPtr a) m a # 
Instance details

Methods

newReference :: a -> m (ForeignPtr a) #

MonadIO m => NewRef (IORef a) m a # 
Instance details

Methods

newReference :: a -> m (IORef a) #

(Storable a, MonadIO m) => ModifyRef (ForeignPtr a) m a # 
Instance details

Methods

atomicModifyReference :: ForeignPtr a -> (a -> (a, b)) -> m b #

modifyReference :: ForeignPtr a -> (a -> a) -> m () #

MonadIO m => ModifyRef (IORef a) m a # 
Instance details

Methods

atomicModifyReference :: IORef a -> (a -> (a, b)) -> m b #

modifyReference :: IORef a -> (a -> a) -> m () #

MonadIO m => ReadRef (IO a) m a # 
Instance details

Methods

readReference :: IO a -> m a #

(Storable a, MonadIO m) => ReadRef (ForeignPtr a) m a # 
Instance details

Methods

readReference :: ForeignPtr a -> m a #

MonadIO m => ReadRef (IORef a) m a # 
Instance details

Methods

readReference :: IORef a -> m a #

(Storable a, MonadIO m) => WriteRef (ForeignPtr a) m a # 
Instance details

Methods

writeReference :: ForeignPtr a -> a -> m () #

MonadIO m => WriteRef (IORef a) m a # 
Instance details

Methods

writeReference :: IORef a -> a -> m () #

MonadIO m => NewRef (MVar a) m (Maybe a) # 
Instance details

Methods

newReference :: Maybe a -> m (MVar a) #

Monad m => NewRef (ST s a) m a # 
Instance details

Methods

newReference :: a -> m (ST s a) #

NewRef (STRef RealWorld a) IO a # 
Instance details

Methods

newReference :: a -> IO (STRef RealWorld a) #

HasRef m => NewRef (Ref m a) m a # 
Instance details

Methods

newReference :: a -> m (Ref m a) #

ModifyRef (STRef RealWorld a) IO a # 
Instance details

Methods

atomicModifyReference :: STRef RealWorld a -> (a -> (a, b)) -> IO b #

modifyReference :: STRef RealWorld a -> (a -> a) -> IO () #

ModifyRef (Ref m a) m a # 
Instance details

Methods

atomicModifyReference :: Ref m a -> (a -> (a, b)) -> m b #

modifyReference :: Ref m a -> (a -> a) -> m () #

MonadIO m => ReadRef (ST RealWorld a) m a # 
Instance details

Methods

readReference :: ST RealWorld a -> m a #

ReadRef (STRef RealWorld a) IO a # 
Instance details

Methods

readReference :: STRef RealWorld a -> IO a #

ReadRef (Ref m a) m a # 
Instance details

Methods

readReference :: Ref m a -> m a #

WriteRef (STRef RealWorld a) IO a # 
Instance details

Methods

writeReference :: STRef RealWorld a -> a -> IO () #

WriteRef (Ref m a) m a # 
Instance details

Methods

writeReference :: Ref m a -> a -> m () #

NewRef (STRef s a) (ST s) a # 
Instance details

Methods

newReference :: a -> ST s (STRef s a) #

NewRef (STRef s a) (ST s) a # 
Instance details

Methods

newReference :: a -> ST s (STRef s a) #

ModifyRef (STRef s a) (ST s) a # 
Instance details

Methods

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

modifyReference :: STRef s a -> (a -> a) -> ST s () #

ModifyRef (STRef s a) (ST s) a # 
Instance details

Methods

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

modifyReference :: STRef s a -> (a -> a) -> ST s () #

ReadRef (ST s a) (ST s) a # 
Instance details

Methods

readReference :: ST s a -> ST s a #

ReadRef (STRef s a) (ST s) a # 
Instance details

Methods

readReference :: STRef s a -> ST s a #

ReadRef (STRef s a) (ST s) a # 
Instance details

Methods

readReference :: STRef s a -> ST s a #

WriteRef (STRef s a) (ST s) a # 
Instance details

Methods

writeReference :: STRef s a -> a -> ST s () #

WriteRef (STRef s a) (ST s) a # 
Instance details

Methods

writeReference :: STRef s a -> a -> ST s () #