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