{-# UNPACK #-}
pragma 告诉编译器消除多余的构造函数。引用Haskell 维基:
例如,鉴于此:
data T = T {-# UNPACK #-} !(Int,Float)
GHC 将像这样表示类型 T:
data T = T Int Float
消除元组。这通常用于将未装箱的 Ints 直接放入构造函数中:
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
优化的功能吗?