STMonadTrans-0.3.4: A monad transformer version of the ST monad

CopyrightJosef Svenningsson 2008-2010
(c) The University of Glasgow 1994-2000
LicenseBSD
Maintainerjosef.svenningsson@gmail.com
Stabilityexperimental
Portabilitynon-portable (GHC Extensions)
Safe HaskellNone
LanguageHaskell98

Control.Monad.ST.Trans

Contents

Description

This library provides a monad transformer version of the ST monad.

Warning! This monad transformer should not be used with monads that can contain multiple answers, like the list monad. The reason is that the will be duplicated across the different answers and this cause Bad Things to happen (such as loss of referential transparency). Safe monads include the monads State, Reader, Writer, Maybe and combinations of their corresponding monad transformers.

Synopsis

The ST Monad Transformer

data STT s m a Source #

STT is the monad transformer providing polymorphic updateable references

runST :: Monad m => (forall s. STT s m a) -> m a Source #

Executes a computation in the STT monad transformer

Mutable references

data STRef s a Source #

Mutable references

Instances

Eq (STRef s a) Source # 

Methods

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

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

newSTRef :: Monad m => a -> STT s m (STRef s a) Source #

Create a new reference

readSTRef :: Monad m => STRef s a -> STT s m a Source #

Reads the value of a reference

writeSTRef :: Monad m => STRef s a -> a -> STT s m () Source #

Modifies the value of a reference

Mutable arrays

data STArray s i e Source #

Mutable arrays

Instances

Eq (STArray s i e) Source # 

Methods

(==) :: STArray s i e -> STArray s i e -> Bool #

(/=) :: STArray s i e -> STArray s i e -> Bool #

newSTArray :: (Ix i, Monad m) => (i, i) -> e -> STT s m (STArray s i e) Source #

Creates a new mutable array

readSTArray :: (Ix i, Monad m) => STArray s i e -> i -> STT s m e Source #

Retrieves an element from the array

writeSTArray :: (Ix i, Monad m) => STArray s i e -> i -> e -> STT s m () Source #

Modifies an element in the array

boundsSTArray :: STArray s i e -> (i, i) Source #

Returns the lowest and highest indices of the array

numElementsSTArray :: STArray s i e -> Int Source #

Returns the number of elements in the array

freezeSTArray :: (Ix i, Monad m) => STArray s i e -> STT s m (Array i e) Source #

Copy a mutable array and turn it into an immutable array

thawSTArray :: (Ix i, Monad m) => Array i e -> STT s m (STArray s i e) Source #

Copy an immutable array and turn it into a mutable array

runSTArray :: (Ix i, Monad m) => (forall s. STT s m (STArray s i e)) -> m (Array i e) Source #

A safe way to create and work with a mutable array before returning an immutable array for later perusal. This function avoids copying the array before returning it.

Unsafe Operations

unsafeIOToSTT :: Monad m => IO a -> STT s m a Source #

Orphan instances

MonadError e m => MonadError e (STT s m) Source # 

Methods

throwError :: e -> STT s m a #

catchError :: STT s m a -> (e -> STT s m a) -> STT s m a #

MonadReader r m => MonadReader r (STT s m) Source # 

Methods

ask :: STT s m r #

local :: (r -> r) -> STT s m a -> STT s m a #

reader :: (r -> a) -> STT s m a #

MonadState s m => MonadState s (STT s' m) Source # 

Methods

get :: STT s' m s #

put :: s -> STT s' m () #

state :: (s -> (a, s)) -> STT s' m a #

MonadWriter w m => MonadWriter w (STT s m) Source # 

Methods

writer :: (a, w) -> STT s m a #

tell :: w -> STT s m () #

listen :: STT s m a -> STT s m (a, w) #

pass :: STT s m (a, w -> w) -> STT s m a #

Functor (STTRet s) Source # 

Methods

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

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

MonadTrans (STT s) Source # 

Methods

lift :: Monad m => m a -> STT s m a #

Monad m => Monad (STT s m) Source # 

Methods

(>>=) :: STT s m a -> (a -> STT s m b) -> STT s m b #

(>>) :: STT s m a -> STT s m b -> STT s m b #

return :: a -> STT s m a #

fail :: String -> STT s m a #

Functor m => Functor (STT s m) Source # 

Methods

fmap :: (a -> b) -> STT s m a -> STT s m b #

(<$) :: a -> STT s m b -> STT s m a #

MonadFix m => MonadFix (STT s m) Source # 

Methods

mfix :: (a -> STT s m a) -> STT s m a #

(Monad m, Functor m) => Applicative (STT s m) Source # 

Methods

pure :: a -> STT s m a #

(<*>) :: STT s m (a -> b) -> STT s m a -> STT s m b #

(*>) :: STT s m a -> STT s m b -> STT s m b #

(<*) :: STT s m a -> STT s m b -> STT s m a #