Python-对于Haskell/GHC来说是"类似"的等式运算符

hvr*_*hvr 12 haskell reference ghc

是否存在GHC特定的"不安全"扩展,以询问两个Haskell引用是否指向同一位置?

我知道如果使用不当,这会破坏引用透明度.但是应该没有什么害处(除非我遗漏了一些东西),如果它被非常小心地使用,作为通过短切递归(或昂贵)数据遍历进行优化的手段,例如用于实现优化Eq实例,例如:

instance Eq ComplexTree where
   a == b  = (a `unsafeSameRef` b) || (a `deepCompare` b)
Run Code Online (Sandbox Code Playgroud)

deepCompare如果unsafeSameRef判定为真(但不一定相反),则保证提供.

编辑/ PS:由于答案指向System.Mem.StableName,我能够找到拉伸存储管理器的文章:Haskell中的弱指针和稳定名称,恰好已经解决了这个问题已经超过10年了......

Rom*_*aka 12

GHC的System.Mem.StableName正好解决了这个问题.


aug*_*tss 8

需要注意的是一个陷阱:

指针平等可以改变严格性.也就是说,你可能会得到指针相等的真实,而事实上真正的相等测试会因为例如循环结构而循环.所以指针等式破坏了语义(但你知道).