Spec-Zone.ru › Haskell 8

Control.Monad.ST

Авторские права (c) Университет Глазго 2001
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддержка libraries@haskell.org
Устойчивость экспериментальная
Переносимость непереносимая (требует универсального квантификатора для runST)
Безопасный 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) = _|_
Примеры реализации
Подробности реализации
Монад (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 Исходный код

Функтор (ST s)

С момента: base-2.1

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

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

Методы

fmap :: (a -> b) -> ST s a -> ST s b Исходный код

(<$) :: a -> ST s b -> ST s a Исходный код

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 :: Строка -> ST s a Исходный код

Применимо (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 Исходный код

Вывод (ST s a)

С момента: base-2.1

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

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

Методы

showsPrec :: Целое -> ST s a -> ShowS Исходный код

show :: ST s a -> Строка Исходный код

showList :: [ST s a] -> ShowS Исходный код

Полугруппа a => Полугруппа (ST s a)

С момента: base-4.11.0.0

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

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

Методы

(<>) :: ST s a -> ST s a -> ST s a Исходный код

sconcat :: Непустой (ST s a) -> ST s a Исходный код

stimes :: Целочисленное b => b -> ST s a -> ST s a Исходный код

Моноид a => Моноид (ST s a)

С момента: base-4.11.0.0

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

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

Методы

mempty :: ST s a Исходный код

mappend :: ST s a -> ST s a -> ST s a Исходный код

mconcat :: [ST s a] -> ST s a Исходный код

runST :: (forall s. ST s a) -> a Source

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

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

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

Обратите внимание, что если f строгое, fixST f = _|_.

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

data RealWorld Source

RealWorld — глубоко магическая сущность. Она примитивна, но не неподнята (поэтому ptrArg). Мы никогда не манипулируем значениями типа RealWorld; оно используется только в системе типов для параметризации State#.

stToIO :: ST RealWorld a -> IO a Source

Встраивает строгий поток состояния в действие 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.html

Spec-Zone.ru

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