【发布时间】:2017-01-03 18:54:41
【问题描述】:
在 GHC 中,{-# UNPACK #-} pragma 和 # 类型后缀运算符有什么区别?
例如,有什么区别:
data T = T {-# UNPACK #-} Int
和
data T = T Int#
【问题讨论】:
-
Int#不是“Int最后带有一些一元运算符#”。Int#是一个类型的名称,真的与Int没有任何关系(就类型系统而言)。 -
请注意,
UNPACK变体的Int之前缺少!。 -
如果我读的是docs对的话,这些没有区别。
-
@Cubic:很公平。但在这种情况下,类型
Int#被定义。{-# UNPACK #-} !Int和Int#之间还有区别吗?一般的区别仅仅是{-# UNPACK #-}可以用于任何类型,而Type#只能用于有限的类型列表,包括Int#? -
不过,总的来说,
UNPACK更强大,因为它可以自动扁平化更复杂的数据结构。