有没有办法在Haskell中获取数据元素的地址(比如列表元素)。
combineLists :: [a] -> [a] -> [a]
combineLists [] y = y
combineLists (x:xs) y = x : combineLists xs y
*Main> let x=[1,23, 12, 45]
*Main> x
[1,23,12,45]
*Main> let y =[90, 56, 78]
*Main> y
[90,56,78]
*Main> let z = combineLists x y
*Main> z
[1,23,12,45,90,56,78]
现在可以通过复制x和y中的元素(内部haskell表示)或
来完全构造z
会是这样的:z = [[来自x的所有元素的副本] y]
我想知道& y ==& z [4](z [4] = 90)。
还有一种方法可以在Python中使用类似于ctypes的东西来转储内部表示。
感谢。
答案 0 :(得分:4)
您可以使用StableName
或reallyUnsafePointerEquality#
(注意名称,不要在真实程序中使用;您还需要MagicHash扩展名才能调用它)来检查是否有两个表达式引用同一个对象。有关差异,请参阅What advantages do StableNames have over reallyUnsafePtrEquality#, and vice versa?。