Control.Monad.ST.Lazy.Safe
| 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 | Trustworthy |
| Language | Haskell2010 |
Описание
Устарело: Safe теперь является значением по умолчанию, пожалуйста, используйте Control.Monad.ST.Lazy вместо этого
Этот модуль представляет идентичный интерфейс к Control.Monad.ST, за исключением того, что монад откладывает вычисление операций ST до тех пор, пока не потребуется значение, зависящее от них.
Только безопасный API.
Монад ST
Ленивый ST monad.
The ST monad allows for destructive updates, but is escapable (unlike IO).
A computation of type ST s a returns a value of type a, and
execute in "thread" s. The s@ параметр является либо
Он служит для того, чтобы внутренние состояния разных вызовов runST были отделены друг от друга и от вызовов stToIO.
Операции >>= и >> не являются строгими в состоянии. Например,
runST (writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2
Экземпляры
| Monad (ST s) | Since: base-2.1 |
| Functor (ST s) | Since: base-2.1 |
| MonadFix (ST s) | Since: base-2.1 |
Определено в Control.Monad.ST.Lazy.Imp | |
| MonadFail (ST s) | Since: base-4.10 |
Определено в Control.Monad.ST.Lazy.Imp | |
| Applicative (ST s) | Since: base-2.1 |
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/8.10.2/docs/html/libraries/base-4.14.1.0/Control-Monad-ST-Lazy-Safe.html