Spec-Zone.ru › Haskell 9

GHC.StableName

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

Содержание

  • Устойчивые имена

Описание

Устойчивые имена — это способ выполнения быстрой ( \(\mathcal{O}(1)\) ), не совсем точной проверки равенства объектов.

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

Устойчивые имена

data StableName a Источник

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

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

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

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

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

  • Нет операции freeStableName, в отличие от Foreign.StablePtr. Устойчивые имена возвращаются системой выполнения, когда они больше не нужны.
  • Нет операции 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.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-StableName.html

Spec-Zone.ru

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