Мне трудно понять, как UNPACK
работает в Haskell.
Рассмотрим, например, следующие объявления данных:
data P a b = P !a !b
data T = T {-# UNPACK #-} !(P Int Int)
Как будет распаковаться datatype T
? Будет ли это эквивалентно
data T' = T' !Int !Int
или дальнейшая распаковка Int
:
data T'' = T'' Int# Int#
? Что насчет
data U = U {-# UNPACK #-} !(P Int (P Int Int))
?