Control.Monad.ST
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | стабильная |
| Переносимость | непереносимая (требует универсального квантификатора для runST) |
| Safe Haskell | Безопасный |
| Язык | Haskell2010 |
Содержание
Описание
Этот модуль предоставляет поддержку жестких потоков состояния, как описано в статье в PLDI '94 Джоном Лоунсбери и Саймоном Пейтон-Джонсом Ленивые функциональные потоки состояния.
Ссылок (переменных), которые могут быть использованы внутри монады ST, обеспечиваются Data.STRef, а массивы — Data.Array.ST.
Монад ST
Жесткая монад ST. Монад ST позволяет выполнять деструктивные обновления, но является выходимой (в отличие от IO). Вычисление типа ST s a возвращает значение типа a, и выполняется в "потоке" s. Параметр s представляет собой:
Он служит для разделения внутренних состояний различных вызовов runST друг от друга и от вызовов stToIO.
Операции >>= и >> являются жесткими относительно состояния (хотя и не по отношению к значениям, хранящимся в состоянии). Например,
runST (writeSTRef _|_ v >>= f) = _|_
Примеры использования
| Applicative (ST s) Source | С версии: base-4.4.0.0 |
| Functor (ST s) Source | С версии: base-2.1 |
| Monad (ST s) Source | С версии: base-2.1 |
| MonadFix (ST s) Source | С версии: base-2.1 |
Определено в GHC.Internal.Control.Monad.Fix | |
| Monoid a => Monoid (ST s a) Source | С версии: base-4.11.0.0 |
| Semigroup a => Semigroup (ST s a) Source | С версии: base-4.11.0.0 |
| Show (ST s a) Source | С версии: base-2.1 |
runST :: (forall s. ST s a) -> a Источник
Возвращает значение, вычисленное потоком состояния. forall гарантирует, что внутреннее состояние, используемое в ST вычислении, недоступно для остальной части программы.
fixST :: (a -> ST s a) -> ST s a Источник
Разрешить использование результата ST вычисления (лениво) внутри вычисления.
Обратите внимание, что если f является строгой функцией, fixST f = _|_.
Преобразование ST в IO
RealWorld — глубоко магическое понятие. Оно является примитивным, но не неподнятым (отсюда ptrArg). Мы никогда не манипулируем значениями типа RealWorld; оно используется только в системе типов для параметризации State#.
stToIO :: ST RealWorld a -> IO a Источник
Встраивание строгого потока состояния в действие IO. Параметр RealWorld указывает, что внутреннее состояние, используемое в ST вычислении, является специальным состоянием, предоставленным монадой IO, и, таким образом, отличается от состояний, используемых вызовами runST.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/Control-Monad-ST.html