Я слышал, что Хаскелла описывают как структурную типизацию. Записи являются исключением из этого, хотя, как я понимаю. Например, foo
нельзя вызывать с чем-то типа HRec2
, хотя HRec
и HRec2
только номинально различаются по своим полям.
data HRec = HRec { x :: Int, y :: Bool }
data HRec2 = HRec2 { p :: Int, q :: Bool }
foo :: HRec -> Bool
Есть ли какое-то объяснение отклонению распространения структурной типизации на все, включая записи?
Существуют ли статически типизированные языки со структурной типизацией даже для записей? Есть ли какие-то дебаты по этому поводу, о которых я могу прочитать для всех статически типизированных языков в целом?