Spec-Zone.ru › Haskell 9

GHC.StableName

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

Содержание

  • Стабильные имена

Описание

Стабильные имена позволяют выполнять быстрое ( \(\mathcal{O}(1)\) ), но не вполне точное сравнение объектов.

Стабильные имена решают следующую задачу: предположим, что вы хотите создать хеш-таблицу, в которой ключами будут объекты Haskell, но для сравнения хотите использовать равенство указателей; возможно, потому что ключи велики и вычисление хеша было бы медленным, или потому что ключи имеют бесконечный размер. Нельзя создать хеш-таблицу, используя адрес объекта в качестве ключа, поскольку сборщик мусора перемещает объекты, а значит, после каждой сборки мусора потребуется повторное хеширование.

Стабильные имена

data StableName a Источник

Абстрактное имя объекта, поддерживающее равенство и хеширование.

Стабильные имена обладают следующим свойством:

  • Если sn1 :: StableName и sn2 :: StableName и sn1 == sn2, то sn1 и sn2 были созданы вызовами makeStableName для одного и того же объекта.

Обратное утверждение не обязательно верно: если два стабильных имени не равны, объекты, которые они обозначают, всё ещё могут быть равны. Обратите особое внимание: makeStableName может возвращать другое StableName после вычисления объекта.

Стабильные имена похожи на стабильные указатели (Foreign.StablePtr), но отличаются следующим:

  • В отличие от Foreign.StablePtr, операция freeStableName отсутствует. Среда выполнения освобождает стабильные имена, когда они больше не нужны.
  • Операция deRefStableName отсутствует. По стабильному имени нельзя получить исходный объект Haskell. Причина в том, что наличие стабильного имени объекта не гарантирует существования самого объекта: он всё ещё может быть удалён сборщиком мусора.

Конструкторы

StableName (StableName# a)
Экземпляры
Подробная информация об экземплярах
Eq (StableName a) Источник

Начиная с: base-2.1

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

Определён в GHC.Internal.StableName

Методы

(==) :: StableName a -> StableName a -> Bool Источник

(/=) :: StableName a -> StableName a -> Bool Источник

makeStableName :: a -> IO (StableName a) Источник

Создаёт StableName для произвольного объекта. Объект, переданный в качестве первого аргумента, не вычисляется функцией makeStableName.

hashStableName :: StableName a -> Int Источник

Преобразует StableName в Int. Возвращаемое Int не обязательно уникально: несколько StableName могут отображаться в одно и то же Int (однако на практике вероятность этого мала, поэтому результат hashStableName хорошо подходит в качестве ключа хеширования).

eqStableName :: StableName a -> StableName b -> Bool Источник

Проверяет равенство StableName без требования совпадения типов аргументов.

Начиная с: base-4.7.0.0

© 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/GHC-StableName.html

Spec-Zone.ru

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