{-# UNPACK #-}
编译指示告诉编译器消除冗余构造函数。引用Haskell wiki:
例如,鉴于此:
data T = T {-# UNPACK #-} !(Int,Float)
GHC将代表类型T:
data T = T Int Float
消除元组。这通常用于将未装箱的Int直接放在构造函数中:
data T = T {-# UNPACK #-} !Int
将表示为
data T = T Int#
我想知道,当要解压缩的字段是多态的时,这是否也有效?例如,如果我定义
data S' a = S String {-# UNPACK #-} !a
type S1 = S' Int
newtype S2 = S2 (S' Int)
是否会优化与S1
或S2
一起使用的功能?