Pet*_*lák 14 optimization haskell strict ghc algebraic-data-types
该{-# UNPACK #-}编译指示告诉编译器消除冗余构造函数.引用Haskell wiki:
例如,鉴于此:
Run Code Online (Sandbox Code Playgroud)data T = T {-# UNPACK #-} !(Int,Float)GHC将代表类型T,如下所示:
Run Code Online (Sandbox Code Playgroud)data T = T Int Float消除元组.这通常用于将未装箱的Int直接放在构造函数中:
Run Code Online (Sandbox Code Playgroud)data T = T {-# UNPACK #-} !Int将表示为
Run Code Online (Sandbox Code Playgroud)data T = T Int#
我想知道,当要解压缩的字段是多态的时,这是否也有效?例如,如果我定义
data S' a = S String {-# UNPACK #-} !a
type S1 = S' Int
newtype S2 = S2 (S' Int)
Run Code Online (Sandbox Code Playgroud)
将使用S1或S2优化的功能?