Movatterモバイル変換


[0]ホーム

URL:


base-4.12.0.0: Basic libraries

Copyright(c) The University of Glasgow 2001
LicenseBSD-style (see the file libraries/base/LICENSE)
Maintainerlibraries@haskell.org
Stabilityexperimental
Portabilitynon-portable (uses Control.Monad.ST)
Safe HaskellTrustworthy
LanguageHaskell2010

Data.STRef

Contents

Description

Mutable references in the (strict) ST monad.

Synopsis

STRefs

dataSTRef s aSource#

a value of typeSTRef s a is a mutable variable in state threads, containing a value of typea

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

Pointer equality.

Since: 2.1

Instance details

Defined inGHC.STRef

Methods

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

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

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

Build a newSTRef in the current state thread

readSTRef ::STRef s a ->ST s aSource#

Read the value of anSTRef

writeSTRef ::STRef s a -> a ->ST s ()Source#

Write a new value into anSTRef

modifySTRef ::STRef s a -> (a -> a) ->ST s ()Source#

Mutate the contents of anSTRef.

>>>:{runST (do    ref <- newSTRef ""    modifySTRef ref (const "world")    modifySTRef ref (++ "!")    modifySTRef ref ("Hello, " ++)    readSTRef ref ):}"Hello, world!"

Be warned thatmodifySTRef does not apply the function strictly. This means if the program callsmodifySTRef 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 may produce a stack overflow:

>>>import Control.Monad (replicateM_)>>>:{print (runST (do    ref <- newSTRef 0    replicateM_ 1000 $ modifySTRef ref (+1)    readSTRef ref )):}1000

To avoid this problem, usemodifySTRef' instead.

modifySTRef' ::STRef s a -> (a -> a) ->ST s ()Source#

Strict version ofmodifySTRef

Since: 4.6.0.0

Produced byHaddock version 2.20.0


[8]ページ先頭

©2009-2025 Movatter.jp