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