Haskell наиболее тесно связан с семейством языков ML. Это включает в себя такие вещи, как OCaml , конечно, но и F # на платформе .NET. Эти языки разделяют с Haskell основы системы типов и то, как используются данные - алгебраические типы данных, сопоставление с образцом, вывод типов и т. Д. Разумеется, они могут существенно отличаться от Haskell в других аспектах - большинство ML являются строгими и нечистыми Начнем с того, что популярность Haskell как средства исследования систем типов и дизайна языков означает, что большинство языков стиля ML имеют тенденцию иметь менее мощные (но потенциально более простые для понимания) системы типов. Можно с уверенностью сказать, что в то время как вы можете пропуститьнекоторые вещи о Haskell, особенно на первых порах, большинство программистов на Haskell, вероятно, чувствовали бы себя комфортно в ML довольно быстро, на базовом уровне достижения цели. Если вам нужен язык с такой же общей структурой, как у Haskell, лучше всего использовать ML.
Функциональная сторона ScalaТакже в значительной степени опирается на традицию ML, а также использует некоторые усовершенствованные функции системы типов, знакомые с Haskell, а также более стандартную систему ООП, интегрированную с вышеупомянутым. В то время как ОО в языках в стиле ML имеет тенденцию восприниматься как «модель ОО с базовыми функциональными инструментами», Scala живет и дышит ОО в стиле Java. Как вы можете себе представить, это имеет преимущества для взаимодействия с Java и предоставляет более знакомую рабочую среду для программистов ОО. Однако, исходя из опыта работы с Haskell, вы, скорее всего, будете раздражены тем, что смешивание вещей в Scala делает функциональные идиомы неуклюжими, а большинство API-интерфейсов Java плохо спроектированы и излишне сложны в использовании.
Наконец, хотя это может показаться странным, Clojure на самом деле имеет много общего с Haskell на более философском уровне. Большая часть того, что вы найдете в подходе Clojure к состоянию и ценностям и идентичностям , очень близка по духу тому, что Хаскель формализует через систему типов. Соответственно, Clojure делает упор на взаимодействие с Java в меньшей степени и не слишком беспокоится о перетаскивании в ООП, поэтому в некоторых отношениях подход Clojure к функциональному программированию сам по себе может быть ближе всего к тому, с чем вы уже знакомы. Я думаю, что это говорит о том, что, насколько мне известно, Clojure является единственным языком, кроме Haskell, который имеет реализацию STMэто просто, эффективно и просто работает. С другой стороны, Clojure происходит из традиции Лиспа и поэтому не имеет статической системы типов и акцентирует внимание на алгебраических типах данных и сопоставлении с образцом, которые встречаются в языках под влиянием ML. И, конечно, это Лисп, который сам по себе негативен для некоторых людей (хотя я действительно не знаю почему).
Говоря от себя, с отказом от ответственности, что мой первый опыт с функциональным программированием был в Scheme, я, вероятно, склонялся бы к Clojure, с OCaml, вероятно, вторым выбором.
Я никогда не использовал его сам, но иногда вижу, как Scala появляется в блогах или в описании проектов, и я полагаю, что он взял основные концепции из Haskell. Scala компилируется в JVM и может взаимодействовать с Java.
источник
Функциональной альтернативой является Erlang . Хотя это очень параллельный язык, последовательное подмножество является чисто функциональным языком со многими свойствами функциональных языков, например замыканиями, неизменяемыми данными и сопоставлением с образцом. Он работает на многих платформах, включая linux, различные unixes, windows и macosx. В настоящее время даже есть реализация на JVM, erjang . Он может легко общаться и сосуществовать с другими языками, именно так он часто используется.
Проверьте основной сайт .
источник
Clojure все шире используется, и хотя он не похож на Haskell на поверхностном уровне, если вы посмотрите немного глубже, он явно очень вдохновлен Haskell и поощряет очень похожий функциональный стиль.
Основные функции Clojure, которые пользователи Haskell могут найти знакомыми и убедительными:
Основные различия (могут быть положительными или отрицательными в зависимости от вашей точки зрения):
Личная точка зрения: я изучал Haskell до Clojure и любил Haskell за его элегантность и математическую чистоту. Clojure черпает много вдохновения и заимствует много хороших особенностей у Haskell, но это гораздо более прагматичный / практический язык. Особенно, если учесть огромную ценность возможности использования экосистемы библиотек Java, тогда это отличный язык для «выполнения работы».
источник
Если вам нравится Haskell, но вам нужно написать код для JVM, вам может быть интересен frege . Он спроектирован как можно ближе к Haskell 2010, но при этом генерирует код Java.
Конечно, сам по себе frege не имеет ничего общего с «широко используемым рабочим языком» (он только недавно был опубликован), но Java, безусловно, есть.
источник