Control.Monad.ST.Lazy
| Авторские права | (c) The University of Glasgow 2001 |
|---|---|
| Лицензия | в стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | предварительная |
| Переносимость | непереносимый (для runST требуется универсальная квантификация) |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
Этот модуль предоставляет интерфейс, идентичный интерфейсу Control.Monad.ST, за исключением того, что эта монада откладывает выполнение операций над состоянием до тех пор, пока не потребуется значение, зависящее от них.
Монада ST
Ленивая монада ST. Монада ST допускает деструктивное обновление, но позволяет выйти за её пределы (в отличие от IO). Вычисление типа ST s a возвращает значение типа a и выполняется в «потоке» s. Параметр s — это либо
Он позволяет отделить внутренние состояния разных вызовов runST друг от друга, а также от состояний вызовов stToIO.
Операции >>= и >> не являются строгими по состоянию. Например:
runST (writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2
Экземпляры
runST :: (forall s. ST s a) -> a Источник
Возвращает значение, вычисленное в вычислении ST. forall гарантирует, что внутреннее состояние, используемое вычислением ST, недоступно остальной части программы.
fixST :: (a -> ST s a) -> ST s a Источник
Позволяет использовать результат вычисления ST (лениво) внутри самого вычисления. Обратите внимание: если f является строгим, то fixST f = _|_.
Преобразование между строгим и ленивым ST
strictToLazyST :: ST s a -> ST s a Источник
Преобразует строгое вычисление ST в ленивое. Строгий поток состояния, переданный в strictToLazyST, не выполняется, пока не потребуется результат возвращаемого им ленивого потока состояния.
lazyToStrictST :: ST s a -> ST s a Источник
Преобразует ленивое вычисление ST в строгое.
Преобразование ST в IO
RealWorld обладает глубоко магической природой. Он примитивный, но не является неподнимаемым (отсюда ptrArg). Мы никогда не манипулируем значениями типа RealWorld; он используется только в системе типов для параметризации State#.
stToIO :: ST RealWorld a -> IO a Источник
Преобразователь монад, встраивающий ленивый ST в монаду 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-Lazy.html