Haskell está más estrechamente relacionado con la familia de idiomas ML. Esto incluye cosas como OCaml , por supuesto, pero también F # en la plataforma .NET. Estos lenguajes comparten con Haskell la base del sistema de tipos y cómo se usan los datos: tipos de datos algebraicos, coincidencia de patrones, inferencia de tipos, etc. Pueden diferir sustancialmente de Haskell en otros puntos, por supuesto, la mayoría de los NM son estrictos e impuros , para empezar, y la popularidad de Haskell como vehículo para la investigación en sistemas de tipos y diseño de idiomas significa que la mayoría de los lenguajes de estilo ML tienden a tener sistemas de tipos menos potentes (pero potencialmente más fáciles de entender). Probablemente sea seguro decir que, si bien puede fallarAlgunas cosas sobre Haskell, particularmente al principio, la mayoría de los programadores de Haskell probablemente se sentirían cómodamente en casa en un ML bastante rápido, en un nivel básico de hacer las cosas. Si desea un idioma con la misma estructura general que Haskell, un ML es su mejor opción.
El lado funcional de Scalatambién se basa en gran medida en la tradición de ML, y también incorpora algunas características avanzadas del sistema de tipos familiares de Haskell, así como un sistema OOP más estándar integrado con lo anterior. Mientras que OO en lenguajes de estilo ML tiende a ser considerado como un "modelo OO con herramientas funcionales básicas", Scala vive y respira OO estilo Java. Esto tiene beneficios para la interoperabilidad de Java, como se puede imaginar, y presenta un entorno de trabajo más familiar para los programadores de OO. Sin embargo, viniendo de un entorno de Haskell, es más probable que te molesten las formas en que mezclar las cosas en Scala hace que los modismos funcionales sean más torpes y que la mayoría de las API de Java estén mal diseñadas y sean innecesariamente difíciles de usar.
Finalmente, aunque puede parecer extraño considerarlo, Clojure en realidad tiene muchas cosas en común con Haskell a un nivel más filosófico. La mayor parte de lo que encontrará en el enfoque de Clojure sobre el estado y los valores frente a las identidades es muy cercano en espíritu a lo que Haskell formaliza a través del sistema de tipos. En consecuencia, Clojure enfatiza la interoperabilidad de Java en un grado menor y no se preocupa tanto por arrastrar a OOP, por lo que, de alguna manera, el enfoque de Clojure para la programación funcional en sí misma puede ser más cercano a lo que ya está familiarizado. Creo que es revelador a este respecto que, hasta donde sé, Clojure es el único lenguaje además de Haskell que tiene una implementación de STMeso es simple, efectivo y simplemente funciona. Por otro lado, Clojure proviene de la tradición de Lisp y, por lo tanto, carece del sistema de tipos estáticos y del énfasis en los tipos de datos algebraicos y la coincidencia de patrones que se encuentran en los lenguajes influenciados por ML. Y, por supuesto, es un Lisp, que en sí mismo es negativo para algunas personas (aunque realmente no sé por qué).
Hablando por mí mismo, con el descargo de responsabilidad de que mi primera experiencia con la programación funcional fue en Scheme, probablemente me inclinaría hacia Clojure, con OCaml como una probable segunda opción.
Nunca lo usé yo mismo, pero veo que Scala aparece en blogs o descripciones de proyectos a veces y creo que tomó conceptos importantes de Haskell. Scala compila a la JVM y puede interoperar con Java.
fuente
Una alternativa funcional es Erlang . Si bien es un lenguaje muy concurrente, el subconjunto secuencial es un lenguaje funcional puro con muchas de las propiedades de los lenguajes funcionales, por ejemplo, cierres, datos inmutables y coincidencia de patrones. Se ejecuta en muchas plataformas, incluyendo Linux, varios Unix, Windows y Macosx. Ahora hay incluso una implementación en la JVM, erjang . Puede comunicarse fácilmente y coexistir con otros idiomas, así es como se usa a menudo.
Echa un vistazo al sitio principal .
fuente
Clojure se usa cada vez más, y aunque no se parece a Haskell en un nivel superficial, si miras un poco más profundo, está claramente inspirado en Haskell y fomenta un estilo funcional muy similar.
Características clave de Clojure que los usuarios de Haskell pueden encontrar familiares y convincentes:
Diferencias clave (pueden ser positivas o negativas según su perspectiva):
Perspectiva personal: aprendí Haskell antes de Clojure, y amé a Haskell por su elegancia y pureza matemática. Clojure se inspira mucho y toma prestadas muchas características buenas de Haskell, pero es un lenguaje mucho más pragmático / práctico. Especialmente cuando cuenta el gran valor de poder aprovechar el ecosistema de la biblioteca de Java, entonces es un gran lenguaje para "hacer cosas".
fuente
Si te gusta Haskell, pero tienes que hacer un código para la JVM, libera puede ser interesante para ti. Está diseñado para estar lo más cerca posible de Haskell 2010, pero genera código Java.
Por supuesto, el frege en sí mismo no se parece en nada al "lenguaje de producción ampliamente utilizado" (recientemente publicado), pero Java sí lo es.
fuente