Я часто собираю несколько значений в кортежи, так как считаю кортежи естественным типом для этого. Однако кортежи не являются строгими. Итак, рассмотрим
data A
data B =
B !A
data C =
C !(B, B)
data D =
D !B !B
С -funbox-strict-fields
и оптимизацией UNPACK являются вложенными. Будет ли кортеж в C
распаковываться в C A A
как D
или просто C B B
? Вот ссылка в GHC-doc: 7.16. Прагмы.
(являются ли непустые кортежи типами ? конструкторами типов?)