Spec-Zone.ru › Haskell 9

Control.Monad.ST

Авторские права (c) Университет Глазго 2001
Лицензия BSD (см. файл libraries/base/LICENSE)
Поддержка libraries@haskell.org
Стабильность стабильная
Переносимость непереносимая (требует универсального квантификатора для runST)
Safe Haskell Безопасный
Язык Haskell2010

Содержание

  • Монад ST
  • Преобразование ST в IO

Описание

Этот модуль предоставляет поддержку жестких потоков состояния, как описано в статье в PLDI '94 Джоном Лоунсбери и Саймоном Пейтон-Джонсом Ленивые функциональные потоки состояния.

Ссылок (переменных), которые могут быть использованы внутри монады ST, обеспечиваются Data.STRef, а массивы — Data.Array.ST.

Монад ST

data ST s a Источник

Жесткая монад ST. Монад ST позволяет выполнять деструктивные обновления, но является выходимой (в отличие от IO). Вычисление типа ST s a возвращает значение типа a, и выполняется в "потоке" s. Параметр s представляет собой:

  • неинициализированную переменную типа (внутри вызовов runST), или
  • RealWorld (внутри вызовов stToIO).

Он служит для разделения внутренних состояний различных вызовов runST друг от друга и от вызовов stToIO.

Операции >>= и >> являются жесткими относительно состояния (хотя и не по отношению к значениям, хранящимся в состоянии). Например,

runST (writeSTRef _|_ v >>= f) = _|_
Примеры использования
Подробности о реализациях
Applicative (ST s) Source

С версии: base-4.4.0.0

Подробности о реализации

Определено в GHC.Internal.ST

Методы

pure :: a -> ST s a Source

(<*>) :: ST s (a -> b) -> ST s a -> ST s b Source

liftA2 :: (a -> b -> c) -> ST s a -> ST s b -> ST s c Source

(*>) :: ST s a -> ST s b -> ST s b Source

(<*) :: ST s a -> ST s b -> ST s a Source

Functor (ST s) Source

С версии: base-2.1

Подробности о реализации

Определено в GHC.Internal.ST

Методы

fmap :: (a -> b) -> ST s a -> ST s b Source

(<$) :: a -> ST s b -> ST s a Source

Monad (ST s) Source

С версии: base-2.1

Подробности о реализации

Определено в GHC.Internal.ST

Методы

(>>=) :: ST s a -> (a -> ST s b) -> ST s b Source

(>>) :: ST s a -> ST s b -> ST s b Source

return :: a -> ST s a Source

MonadFix (ST s) Source

С версии: base-2.1

Подробности о реализации

Определено в GHC.Internal.Control.Monad.Fix

Методы

mfix :: (a -> ST s a) -> ST s a Source

Monoid a => Monoid (ST s a) Source

С версии: base-4.11.0.0

Подробности о реализации

Определено в GHC.Internal.ST

Методы

mempty :: ST s a Source

mappend :: ST s a -> ST s a -> ST s a Source

mconcat :: [ST s a] -> ST s a Source

Semigroup a => Semigroup (ST s a) Source

С версии: base-4.11.0.0

Подробности о реализации

Определено в GHC.Internal.ST

Методы

(<>) :: ST s a -> ST s a -> ST s a Source

sconcat :: NonEmpty (ST s a) -> ST s a Source

stimes :: Integral b => b -> ST s a -> ST s a Source

Show (ST s a) Source

С версии: base-2.1

Подробности экземпляра

Определено в GHC.Internal.ST

Методы

showsPrec :: Целое -> ST s a -> ShowS Источник

show :: ST s a -> Строка Источник

showList :: [ST s a] -> ShowS Источник

runST :: (forall s. ST s a) -> a Источник

Возвращает значение, вычисленное потоком состояния. forall гарантирует, что внутреннее состояние, используемое в ST вычислении, недоступно для остальной части программы.

fixST :: (a -> ST s a) -> ST s a Источник

Разрешить использование результата ST вычисления (лениво) внутри вычисления.

Обратите внимание, что если f является строгой функцией, fixST f = _|_.

Преобразование ST в IO

data RealWorld Источник

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/9.12.1/docs/libraries/base-4.21.0.0-8e62/Control-Monad-ST.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API