Spec-Zone.ru › Haskell 7

Control.Monad.ST.Lazy

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

Содержание

  • Монад ST
  • Преобразование между строгой и ленивой ST
  • Преобразование ST в IO

Описание

Этот модуль представляет идентичный интерфейс к Control.Monad.ST, за исключением того, что монада откладывает оценку операций состояния до тех пор, пока не потребуется значение, зависящее от них.

Монада ST

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

Ленивая монада преобразователя состояния. Вычисление типа ST s a преобразует внутреннее состояние, индексированное s, и возвращает значение типа a. Параметр s это либо

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

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

Операции >>= и >> не являются строгими по отношению к состоянию. Например,

runST (writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2

Примеры

Монада (ST s)
Функтор (ST s)
MonadFix (ST s)
Прикладной (ST s)

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

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

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

Позволяет использовать результат вычисления преобразователя состояния (лениво) внутри вычисления. Обратите внимание, что если f строгое, то fixST f = _|_.

Преобразование между строгой и ленивой ST

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

Преобразование строгого вычисления ST в ленивое. Строгий поток состояния, переданный strictToLazyST, не выполняется до тех пор, пока не потребуется результат возвращаемого ленивого потока состояния.

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

Преобразование ленивого вычисления ST в строгое.

Преобразование 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-Lazy.html

Spec-Zone.ru

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