Типы суммы, как правило, будут менее полезны в основных языках ОО, поскольку они решают проблему, аналогичную типу ОО. Один из способов взглянуть на них состоит в том, что они оба обрабатывают подтипы, но OO - это open
то, что можно добавить произвольные подтипы к родительскому типу, а типы сумм - closed
то есть, кто заранее определяет, какие подтипы допустимы.
Теперь многие ОО-языки сочетают подтипы с другими понятиями, такими как унаследованные структуры, полиморфизм, типизация ссылок и т. Д., Чтобы сделать их в целом более полезными. Как следствие, они, как правило, требуют больше усилий для настройки (с классами и конструкторами и так далее), поэтому обычно их не используют для таких вещей, как Result
s и Option
s и так далее, пока универсальная типизация не станет обычной.
Я бы также сказал, что акцент на реальных отношениях, которые большинство людей изучило, когда они начали программирование ОО, например, Dog isa Animal, означал, что Integer isa Result или Error isa Result кажутся немного чуждыми. Хотя идеи довольно похожи.
Что касается того, почему функциональные языки могут предпочесть закрытую типизацию открытой, то возможной причиной является то, что они предпочитают сопоставление с образцом. Это полезно для полиморфизма функций, но также очень хорошо работает с закрытыми типами, поскольку компилятор может статически проверять, что сопоставление охватывает все подтипы. Это может сделать язык более последовательным, хотя я не верю, что есть какая-то внутренняя выгода (я могу ошибаться).