Control.Monad.ST
| Авторские права | (c) The University of Glasgow 2001 |
|---|---|
| Лицензия | В стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | стабильный |
| Переносимость | непереносимый (для runST требуется универсальная квантификация) |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Содержание
Описание
Этот модуль предоставляет поддержку строгих потоков состояний, описанных в статье Джона Лончбери и Саймона Пейтона Джонса Lazy Functional State Threads, опубликованной на конференции PLDI в 1994 году.
Ссылки (переменные), которые можно использовать в монаде 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) Источник | С версии: base-4.4.0.0 |
| Functor (ST s) Источник | С версии: base-2.1 |
| Monad (ST s) Источник | С версии: base-2.1 |
| MonadFix (ST s) Источник | С версии: base-2.1 |
Определено в GHC.Internal.Control.Monad.Fix | |
| Monoid a => Monoid (ST s a) Источник | С версии: base-4.11.0.0 |
| Semigroup a => Semigroup (ST s a) Источник | С версии: base-4.11.0.0 |
| Show (ST s a) Источник | С версии: 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.14.1/docs/libraries/base-4.22.0.0-66f8/Control-Monad-ST.html