Data.STRef

Data.STRef

Copyright (c) The University of Glasgow 2001
License BSD-style (see the file libraries/base/LICENSE)
Maintainer libraries@haskell.org
Stability experimental
Portability non-portable (uses Control.Monad.ST)
Safe Haskell Trustworthy
Language Haskell2010

Contents

Description

Mutable references in the (strict) ST monad.

STRefs

data STRef s a Source

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

Instances

Eq (STRef s a)

Methods

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

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

newSTRef :: a -> ST s (STRef s a) Source

Build a new STRef in the current state thread

readSTRef :: STRef s a -> ST s a Source

Read the value of an STRef

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

Since: 4.6.0.0

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.0.1/docs/html/libraries/base-4.9.0.0/Data-STRef.html

在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

意见反馈
返回顶部