{-# UNPACK #-}
pragma yêu cầu trình biên dịch loại bỏ các nhà thầu dự phòng. Trích dẫn Haskell wiki:Cách giải nén các trường nghiêm ngặt đi cùng với đa hình?
Ví dụ, đưa ra này:
data T = T {-# UNPACK #-} !(Int,Float)
GHC sẽ đại diện cho loại T như thế này:
data T = T Int Float
loại bỏ các tuple. Điều này thường được sử dụng để đưa Ints không có hộp bọc trực tiếp trong một constructor:
data T = T {-# UNPACK #-} !Int
sẽ được biểu diễn như
data T = T Int#
tôi đã tự hỏi, Điều này cũng làm việc khi lĩnh vực để được giải nén là đa hình ? Ví dụ, nếu tôi xác định
data S' a = S String {-# UNPACK #-} !a
type S1 = S' Int
newtype S2 = S2 (S' Int)
sẽ chức năng làm việc với S1
hoặc S2
được tối ưu hóa?