кнопка типа ввода - метка против значения

Существует ли специфичное для GHC «небезопасное» расширение, которое спрашивает, указывают ли две ссылки Haskell на одно и то же место?

Я знаю, что это может нарушить ссылочную прозрачность, если не используется должным образом. Но вреда не будет (если я чего-то не упущу), если его использовать очень осторожно, как средство для оптимизации путем кратковременного рекурсивного (или дорогостоящего) обхода данных, например, для реализации оптимизированного уравнения ], например:

instance Eq ComplexTree where
   a == b  = (a `unsafeSameRef` b) || (a `deepCompare` b)

предоставление deepCompare гарантированно будет истинным, если unsafeSameRef определит истину (но не обязательно наоборот).

EDIT / PS : Благодаря ответу, указывающему на System.Mem.StableName , я также смог найти статью Расширение диспетчера хранилища: слабые указатели и стабильные имена в Haskell , в которой, как выяснилось, была рассмотрена эта проблема. очень проблема уже более 10 лет назад ...

12
задан hvr 18 April 2011 в 18:19
поделиться