Ответ 1
Технически объекты OCaml на самом деле не поддерживают подтипирование в обычном смысле, а полиморфизм строк. Существует много преимуществ полиморфизма строк над подтипированием, в частности, он более выразителен и намного лучше работает с типом вывода (подтипирование и вывод типа вообще не смешиваются).
Основная проблема с использованием структурного подтипирования или полиморфизма строк для всех записей заключается в том, что для этого требуется значительно более сложная реализация времени выполнения, а следовательно, и более дорогостоящая. Там, где простые записи могут быть тривиально переведены в простые кортежи, причем доступ к полям является просто индексированием, структурный подтипирование или полиморфизм строк требуют возможности прозрачного "среза" объекта, т.е. Просматривать его под супертипом со снятыми случайными полями. В общем, для этого требуется либо поиск в поле, либо хеширование (например, объекты Ocaml), либо методы передачи доказательств, где индекс каждого поля, используемого функцией или любым из ее вызываемых лиц, должен передаваться как скрытый аргумент в дополнение к фактическому запись (что делает, например, SML #).
В любом случае Ocaml имеет полиморфные записи, их просто называют объектами. Но вы можете игнорировать все классовые беспорядки вокруг них, если вам это не нужно.