Control.Monad.ST.Safe
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Устойчивость | экспериментальная |
| Переносимость | непереносимая (требует универсального квантификатора для runST) |
| Safe Haskell | Надежный |
| Язык | Haskell2010 |
Содержание
Описание
Устарело: Safe теперь является значением по умолчанию, пожалуйста, используйте Control.Monad.ST вместо него
Эта библиотека предоставляет поддержку жестких потоков состояния, как описано в статье PLDI '94 Джона Лаунчбери и Саймона Пейтона Джонса Ленивые функциональные потоки состояния.
Только API Safe.
Монад ST
Жесткая монад ST. Монад ST позволяет выполнять деструктивные обновления, но является исполняемой (в отличие от IO). Вычисление типа ST s a возвращает значение типа a, и выполняется в «потоке» s. Параметр s это либо
Она служит для того, чтобы хранить внутренние состояния различных вызовов runST отдельно друг от друга и от вызовов stToIO.
Операции >>= и >> строгие по отношению к состоянию (хотя и не по отношению к значениям, хранящимся в состоянии). Например,
runST (writeSTRef _|_ v >>= f) = _|_
Примеры использования
| Monad (ST s) | С момента: base-2.1 |
Определено в GHC.ST Методы(>>=) :: ST s a -> (a -> ST s b) -> ST s b Исходный код (>>) :: ST s a -> ST s b -> ST s b Исходный код return :: a -> ST s a Исходный код | |
| Functor (ST s) | С момента: base-2.1 |
Определено в GHC.ST | |
| MonadFix (ST s) | С момента: base-2.1 |
Определено в Control.Monad.Fix Методыmfix :: (a -> ST s a) -> ST s a Исходный код | |
| MonadFail (ST s) | С момента: base-4.11.0.0 |
Определено в GHC.ST Методыfail :: String -> ST s a Исходный код | |
| Applicative (ST s) | С момента: base-4.4.0.0 |
Определено в GHC.ST Методыpure :: a -> ST s a Исходный код (<*>) :: ST s (a -> b) -> ST s a -> ST s b Исходный код liftA2 :: (a -> b -> c) -> ST s a -> ST s b -> ST s c Исходный код (*>) :: ST s a -> ST s b -> ST s b Исходный код (<*) :: ST s a -> ST s b -> ST s a Исходный код | |
| Show (ST s a) | С момента: base-2.1 |
Определено в GHC.ST МетодыshowsPrec :: Int -> ST s a -> ShowS Исходный код show :: ST s a -> String Исходный код showList :: [ST s a] -> ShowS Исходный код | |
| Semigroup a => Semigroup (ST s a) | С момента: base-4.11.0.0 |
| Monoid a => Monoid (ST s a) | С момента: base-4.11.0.0 |
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/8.10.2/docs/html/libraries/base-4.14.1.0/Control-Monad-ST-Safe.html