Spec-Zone.ru › Haskell 7

Data.STRef

Авторские права (c) Университет Глазго 2001
Лицензия BSD (см. файл libraries/base/LICENSE)
Поддерживающий libraries@haskell.org
Стабильность экспериментальная
Переносимость непереносимая (использует Control.Monad.ST)
Безопасный Haskell Надёжный
Язык Haskell2010

Содержание

  • STRefs

Описание

Изменяемые ссылки в (строгом) монаде ST.

STRefs

data STRef s a Источник

Значение типа STRef s a — это изменяемая переменная в потоке состояния s, содержащая значение типа a

Примеры реализации

Eq (STRef s a)

newSTRef :: a -> ST s (STRef s a) Источник

Создаёт новую STRef в текущем потоке состояния

readSTRef :: STRef s a -> ST s a Источник

Считывает значение STRef

writeSTRef :: STRef s a -> a -> ST s () Источник

Записывает новое значение в STRef

modifySTRef :: STRef s a -> (a -> a) -> ST s () Источник

Изменяет содержимое STRef.

Обратите внимание, что modifySTRef не применяет функцию строго. Это означает, что если программа многократно вызывает modifySTRef, но редко использует значение, в памяти будут накапливаться отложенные вычисления, что приведёт к утечке памяти. Это распространённая ошибка при использовании STRef в качестве счётчика. Например, следующее приведёт к утечке памяти и, вероятно, к переполнению стека:

print $ runST $ do
    ref <- newSTRef 0
    replicateM_ 1000000 $ modifySTRef ref (+1)
    readSTRef ref

Для решения этой проблемы используйте modifySTRef' вместо неё.

modifySTRef' :: STRef s a -> (a -> a) -> ST s () Источник

Строгая версия modifySTRef

С версии: 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/7.10.3/docs/html/libraries/base-4.8.2.0/Data-STRef.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API