Я не мог понять, как комментировать ответы, поэтому я делаю комментарии в этом ответе.
Во-первых, спасибо за ваши ответы.
FUZxxl: я попытался -ddump-core и получил сообщение об ошибке, что -ddump-core был нераспознанным флагом. Возможно, вы имели в виду -ddump -imp, который рекомендовала использовать книга Real World Haskell, но, боюсь, я не знаю, как прочитать вывод. Я искал в выходном файле «vx» и т. Д., Но никогда не видел их. Я думаю, я должен научиться читать ядро. Есть ли хорошие руководства для этого?
Джон: Согласно справочной документации флага GHC , если я правильно читаю, предполагается, что -auto и -auto-all добавляют _scc_s к функциям , а не с пометкой INLINE , Чтобы увидеть, будет ли -auto работать для меня, я создал еще один тестовый пример, в котором код Vec3 находился в отдельном файле / модуле, с экспортированными Vec3 (Vec3), vx, vy, vz и dot. Я импортировал этот модуль в файл Main.hs. Скомпилировав их с -auto, я все еще видел vx, vy, vz в файле .prof.
Re: ваш комментарий о том, что разница может быть связана с синтаксисом записи, а не с полиморфизмом. Я полагаю, что разница более вероятна из-за полиморфизма, потому что, когда я определил
data Vec3 a = Vec3 {vx, vy, vz :: !a}
vx, vy и vz все еще отображаются в файле .prof.
Тэд