Лично я считаю, что с ООП легче справляться в рамках ограничений того, с чем он хорошо справляется. Другими словами: в случаях, когда вам на самом деле не нужно классов типов, я нахожу объекты более понятными.
Однако, это может быть просто артефакт синтаксических издержек, которые имеет типичное встраивание объектов класса типов. Если бы у Haskell был синтаксический сахар для некоторых распространенных типов шаблонов типов, это различие, вероятно, исчезло бы.
Что мне кажется более интересным, так это то, что сообщество Haskell показывает, что классы типов являются более мощными, чем объекты, поскольку существует тривиальное встраивание объектов в классы типов, но классы типов могут делать то, чего не могут делать объекты. Сообщество Scala, однако, показывает, что объекты по крайней мере столь же мощны, как классы типов 1 , поскольку существует тривиальное вложение классов типов в объекты.
Это, кажется, указывает на то, что отношения между ними гораздо более близки, чем принято думать.
1 См. Типовые классы как объекты и следствия , автор Bruno C.d.S. Оливейра, Адриан Мурс и Мартин Одерский, а также обсуждение этой статьи по Лямбда-ультиматум , особенно это прекрасное резюме Пола Снайвели (выделение добавлено):
Мартин Одерски и дизайнерские решения команды о том, как проводить уроки типов на унифицированном языке OO и FP, продолжают приносить плоды. Последствия все меньше и меньше напоминают «классы типов бедняков», и все больше и больше напоминают улучшение классов типов , на мой взгляд, с учетом краткого прочтения этой статьи.