Copyright | (c) The University of Glasgow 2001 |
---|---|
License | (c) The University of Glasgow 2001 |
Maintainer | libraries@haskell.org |
Stability | experimental |
Portability | non-portable (uses Control.Monad.ST) |
Safe Haskell | Trustworthy |
Mutable references in the (strict) ST monad.
STRefs
a value of type STRef s a
is a mutable variable in state thread s
,
containing a value of type a
writeSTRef :: STRef s a -> a -> ST s ()Source
Write a new value into an STRef
modifySTRef :: STRef s a -> (a -> a) -> ST s ()Source
Mutate the contents of an STRef
.
Be warned that modifySTRef
does not apply the function strictly. This
means if the program calls modifySTRef
many times, but seldomly uses the
value, thunks will pile up in memory resulting in a space leak. This is a
common mistake made when using an STRef as a counter. For example, the
following will leak memory and likely produce a stack overflow:
print $ runST $ do ref <- newSTRef 0 replicateM_ 1000000 $ modifySTRef ref (+1) readSTRef ref
To avoid this problem, use modifySTRef'
instead.
modifySTRef' :: STRef s a -> (a -> a) -> ST s ()Source
Strict version of modifySTRef