Как упомянуто в одном из комментариев от OP, эта таблица объясняет, как Scala сравнивает общую поддержку программирования. Ссылка на источник pdf
Позже будет предоставлено следующее резюме:
Scala
Используя шаблон CONCEPT, мы можем моделировать многотипные концепции, множественные ограничения и поддерживать ретроактивное моделирование. Кроме того, поддержка Scala для имплицитов означает, что недостатки решений Java и C # в части дополнительных издержек не распространяются на Scala. Таким образом, Scala хорошо зарекомендовал себя как в неявном выводе аргументов, так и в критериях ретроактивного моделирования. В разделе 6 показано, что связанные типы поддерживаются в Scala посредством членов типа и зависимых типов методов, а члены типа также могут использоваться в качестве псевдонимов типов.
Как показано в Разделе 3, Scala поддерживает лексически ограниченные модели. Кроме того, проверка типов является полностью модульной. Приоритеты перекрывающихся приоритетов обеспечивают некоторую поддержку основанной на концепции перегрузки, как показано в zipWithNпример в разделе 6.5. Однако перекрывающиеся модели должны быть структурированы с использованием иерархии подтипов, что не всегда желательно. Таким образом, оценка для этой функции достаточно. Наконец, Scala имеет полную поддержку функций первого класса, а также поддерживает ограничения равенства.
Таким образом, Scala оказывается языком с отличной поддержкой общих функций программирования, способных работать на том же уровне или даже немного лучше, чем G (который был специально разработан как язык для общего программирования в целом) или Haskell ( который был признан, имеет очень хорошую поддержку для общего программирования).
А потом в резюме:
Члены типа и зависимые типы методов добавляют дополнительную мощь языку, а комбинация двух механизмов позволяет выражать связанные типы. В сочетании с имплицитами члены-типы и зависимые типы методов делают Scala языком, готовым для общего программирования в целом.