persistent-refs-0.4: Haskell references backed by an IntMap for persistence and reversibility.

Copyright(c) Adam C. Foltzer 2013
LicenseBSD3
Maintaineracfoltzer@gmail.com
Stabilityexperimental
Portabilitynon-portable (requires rank-2 types for runST)
Safe HaskellNone
LanguageHaskell98

Control.Monad.ST.Persistent

Contents

Description

This library provides support for a persistent version of the ST monad. Internally, references are backed by a IntMap, rather than being mutable variables on the heap. This decreases performance, but can be useful in certain settings, particularly those involving backtracking.

Synopsis

The Persistent ST Monad

type ST s = STT s Identity #

A persistent version of the ST monad.

runST :: (forall s. ST s a) -> a #

Run a computation that uses persistent references, and return a pure value. The rank-2 type offers similar guarantees to runST.

The Persistent ST Monad transformer

data STT s m a #

Instances
MonadTrans (STT s) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

Methods

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

Monad m => MonadRef (STRef s) (STT s m) # 
Instance details

Defined in Data.STRef.Persistent

Methods

newRef :: a -> STT s m (STRef s a) #

readRef :: STRef s a -> STT s m a #

writeRef :: STRef s a -> a -> STT s m () #

modifyRef :: STRef s a -> (a -> a) -> STT s m () #

modifyRef' :: STRef s a -> (a -> a) -> STT s m () #

Monad m => Monad (STT s m) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

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) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

Methods

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

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

Monad m => Applicative (STT s m) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

Methods

pure :: a -> STT s m a #

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

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

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

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

MonadIO m => MonadIO (STT s m) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

Methods

liftIO :: IO a -> STT s m a #

MonadPlus m => Alternative (STT s m) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

Methods

empty :: STT s m a #

(<|>) :: STT s m a -> STT s m a -> STT s m a #

some :: STT s m a -> STT s m [a] #

many :: STT s m a -> STT s m [a] #

MonadPlus m => MonadPlus (STT s m) # 
Instance details

Defined in Control.Monad.ST.Persistent.Internal

Methods

mzero :: STT s m a #

mplus :: STT s m a -> STT s m a -> STT s m a #

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

Run a computation that uses persistent references, and return a pure value. The rank-2 type offers similar guarantees to runST.