Существует ли специфичное для GHC «небезопасное» расширение, которое спрашивает, указывают ли две ссылки Haskell на одно и то же место?
Я знаю, что это может нарушить ссылочную прозрачность, если не используется должным образом. Но вреда не будет (если я чего-то не упущу), если его использовать очень осторожно, как средство для оптимизации путем кратковременного рекурсивного (или дорогостоящего) обхода данных, например, для реализации оптимизированного уравнения
], например:
instance Eq ComplexTree where
a == b = (a `unsafeSameRef` b) || (a `deepCompare` b)
предоставление deepCompare
гарантированно будет истинным, если unsafeSameRef
определит истину (но не обязательно наоборот).
EDIT / PS : Благодаря ответу, указывающему на System.Mem.StableName
, я также смог найти статью Расширение диспетчера хранилища: слабые указатели и стабильные имена в Haskell , в которой, как выяснилось, была рассмотрена эта проблема. очень проблема уже более 10 лет назад ...