Control.Monad.ST
| Авторские права | (с) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | непереносимая (требует универсального квантификатора для runST) |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Содержание
Описание
Эта библиотека предоставляет поддержку жестких потоков состояния, как описано в статье PLDI '94 Джона Лоунсбери и Саймона Пейтона Джонса Ленивые функциональные потоки состояния.
Ссылок (переменных), которые могут использоваться в монаде ST, предоставляют Data.STRef, а массивы — Data.Array.ST.
Монад ST
data ST s a Исходный код
Монад жестких преобразователей состояния. Вычисление типа ST s a преобразует внутреннее состояние, индексированное s, и возвращает значение типа a. Параметр s — это либо
Он служит для разделения внутренних состояний различных вызовов runST друг от друга и от вызовов stToIO.
Операции >>= и >> жёстко зависят от состояния (хотя и не от значений, хранящихся в состоянии). Например,
runST (writeSTRef _|_ v >>= f) = _|_
runST :: (forall s. ST s a) -> a Исходный код
Возвращает значение, вычисленное вычислением преобразователя состояния. forall гарантирует, что внутреннее состояние, используемое вычислением ST, недоступно остальной части программы.
fixST :: (a -> ST s a) -> ST s a Исходный код
Разрешает использовать результат вычисления преобразователя состояния (лениво) внутри вычисления. Обратите внимание, что если f является жестким, fixST f = _|_.
Преобразование ST в IO
data RealWorld :: * Исходный код
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/7.10.3/docs/html/libraries/base-4.8.2.0/Control-Monad-ST.html