Spec-Zone.ru › Haskell 7

Control.Monad.ST.Lazy.Safe

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

Содержание

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

Описание

Устаревшее: Safe — теперь значение по умолчанию, пожалуйста, используйте Control.Monad.ST.Lazy вместо него

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

Только безопасный API.

Монад 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-Safe.html

Spec-Zone.ru

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