我很难理解UNPACK
在Haskell中是如何工作的。例如,考虑以下数据声明:
data P a b = P !a !b
data T = T {-# UNPACK #-} !(P Int Int)
数据类型T
将如何解包?它是否等同于
data T' = T' !Int !Int
或者,Int
将被进一步拆解:
data T'' = T'' Int# Int#
?关于
data U = U {-# UNPACK #-} !(P Int (P Int Int))
发布于 2015-11-26 15:55:29
GHC documentation对UNPACK
杂注的描述如下:
如何解压数据类型
T
?
data T = T (P Int Int)
对应于
因此,data T = T {-# UNPACK #-} !(P Int Int)
对应于
简单地说,UNPACK
将构造器P
的内容解压到构造器T
的字段中,删除了一级间接和一个构造器头部(P
)。
data T = T {-# UNPACK #-} !(P Int Int)
不像data T'' = T'' Int# Int#
那样“紧凑”
关于什么?
数据U=U {-#解包#-} !(P整数(P整数))
?
类似地,data U = U (P Int (P Int Int))
对应于
而data U = U {-# UNPACK #-} !(P Int (P Int Int))
对应于
资源
https://stackoverflow.com/questions/33931991
复制相似问题