Spec-Zone.ru › Haskell 7

Control.Monad.ST

Авторские права (с) Университет Глазго 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 s a преобразует внутреннее состояние, индексированное s, и возвращает значение типа a. Параметр s — это либо

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

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

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

runST (writeSTRef _|_ v >>= f) = _|_

Примеры

Monad (ST s)
Functor (ST s)
MonadFix (ST s)
Applicative (ST s)
Show (ST s a)

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

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

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

Разрешает использовать результат вычисления преобразователя состояния (лениво) внутри вычисления. Обратите внимание, что если 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/7.10.3/docs/html/libraries/base-4.8.2.0/Control-Monad-ST.html

Spec-Zone.ru

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