Система типов Scala отличается от системы типов Haskell, хотя концепции Scala иногда напрямую связаны с сильными сторонами Haskell и его знающим сообществом исследователей и специалистов.
Конечно, работа на виртуальной машине, в первую очередь не предназначенной для функционального программирования, создает некоторые проблемы совместимости с существующими языками для этой платформы.
Поскольку большинство рассуждений о типах происходит во время компиляции, ограничения Java (как языка и как платформы) во время выполнения не должны вызывать беспокойства (кроме Erasure Type, хотя именно эта ошибка, кажется, делает интеграцию в Java экосистема более бесшовная).
Насколько мне известно, единственным "компромиссом" на уровне системы типов с Java является специальный синтаксис для обработки необработанных типов. Хотя Scala даже не допускает использование необработанных типов, она принимает старые файлы классов Java с этой ошибкой.
Возможно, вы видели код вроде List[_]
(или более длинный эквивалент List[T] forSome { type T }
). Это функция совместимости с Java, но внутренне она также рассматривается как экзистенциальный тип и не ослабляет систему типов.
Система типов Scala поддерживает классы типов , хотя и более многословно, чем Haskell. Я предлагаю прочитать этот документ, который может создать другое впечатление об относительной силе системы типов Scala (таблица на стр. 17 служит хорошим списком очень мощных концепций системы типов).
Не обязательно связан с мощью системы типов тот подход, который используют компиляторы Scala и Haskell для вывода типов, хотя он оказывает некоторое влияние на то, как люди пишут код.
Наличие мощного алгоритма вывода типов может помочь написать более абстрактный код (вы сами можете решить, хорошо ли это во всех случаях).
В конце концов система типов Scala и Haskell основана на стремлении предоставить своим пользователям лучшие инструменты для решения своих проблем, но они пошли разными путями к этой цели.