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]

现在,z是完全通过复制x和y(内部haskell表示)或中的元素来构建的吗

z会是类似于:z=[[来自x]y]的所有元素的副本吗

我想看看&y==&z[4](z[4]=90)。

还有一种方法可以使用类似于Python中的ctypes的东西来转储内部表示。

谢谢。

您可以使用StableNamereallyUnsafePointerEquality#(注意名称,不要在实际程序中使用;您还需要MagicHash扩展来调用它)来检查两个表达式是否引用同一对象。请参阅StableNames相对于reallyUnsafePtREQUEST#有哪些优势,反之亦然?对于差异。

最新更新