Spec-Zone.ru › Haskell 9

Control.Monad.ST

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

Содержание

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

Описание

Этот модуль предоставляет поддержку строгих потоков состояний, описанных в статье Джона Лончбери и Саймона Пейтона Джонса Lazy Functional State Threads, опубликованной на конференции PLDI в 1994 году.

Ссылки (переменные), которые можно использовать в монаде 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) Источник

С версии: base-4.4.0.0

Сведения об экземпляре

Определено в GHC.Internal.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 Источник

Functor (ST s) Источник

С версии: base-2.1

Сведения об экземпляре

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

Методы

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

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

Monad (ST s) Источник

С версии: base-2.1

Сведения об экземпляре

Определено в GHC.Internal.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 Источник

MonadFix (ST s) Источник

С версии: base-2.1

Сведения об экземпляре

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

Методы

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

Monoid a => Monoid (ST s a) Источник

С версии: base-4.11.0.0

Сведения об экземпляре

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

Методы

mempty :: ST s a Источник

mappend :: ST s a -> ST s a -> ST s a Источник

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

Semigroup a => Semigroup (ST s a) Источник

С версии: base-4.11.0.0

Сведения об экземпляре

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

Методы

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

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

stimes :: Integral b => b -> ST s a -> ST s a Источник

Show (ST s a) Источник

С версии: base-2.1

Сведения об экземпляре

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

Методы

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

show :: ST s a -> String Источник

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.14.1/docs/libraries/base-4.22.0.0-66f8/Control-Monad-ST.html

Spec-Zone.ru

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