Haskell:获取列表的内存地址

时间:2015-03-28 16:54:30

标签: haskell

有没有办法在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的东西来转储内部表示。

感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用StableNamereallyUnsafePointerEquality#(注意名称,不要在真实程序中使用;您还需要MagicHash扩展名才能调用它)来检查是否有两个表达式引用同一个对象。有关差异,请参阅What advantages do StableNames have over reallyUnsafePtrEquality#, and vice versa?