Data.STRef
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD (см. файл libraries/base/LICENSE) |
| Поддерживающий | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | непереносимая (использует Control.Monad.ST) |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Содержание
Описание
Изменяемые ссылки в (строгом) монаде ST.
STRefs
Значение типа STRef s a — это изменяемая переменная в потоке состояния 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