14
{-# UNPACK #-}
编译指示告诉编译器消除多余的构造函数。引述Haskell wiki:严格字段如何解开多态性?
例如,给定此:
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
工作功能进行优化?