Control.Monad.ST.Lazy
| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | provisional |
| Portability | non-portable (requires universal quantification for runST) |
| Safe Haskell | Safe |
| Language | 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 Source
Возвращает значение, вычисленное вычислением ST. forall гарантирует, что внутреннее состояние, используемое вычислением ST, недоступно для остальной части программы.
fixST :: (a -> ST s a) -> ST s a Source
Разрешает использовать (лениво) результат вычисления ST внутри вычисления. Обратите внимание, что если f является строгим, fixST f = _|_.
Преобразование между строгим и ленивым ST
strictToLazyST :: ST s a -> ST s a Source
Преобразовать вычисление со строгим ST в ленивое. Строгая нить состояния, переданная strictToLazyST, не выполняется до тех пор, пока не потребуется результат ленивой нити состояния, которую она возвращает.
lazyToStrictST :: ST s a -> ST s a Source
Преобразовать ленивое ST вычисление в строгое.
Преобразование ST в IO
RealWorld — это глубоко магическое понятие. Оно является примитивным, но не неподнятым (отсюда ptrArg). Мы никогда не манипулируем значениями типа RealWorld; оно используется только в системе типов для параметризации State#.
stToIO :: ST RealWorld a -> IO a Source
Трансформатор монады, встраивающий ленивое 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.12.1/docs/libraries/base-4.21.0.0-8e62/Control-Monad-ST-Lazy.html