Haskell está mais intimamente relacionado à família de idiomas ML. Isso inclui coisas como OCaml , é claro, mas também F # na plataforma .NET. Essas linguagens compartilham com Haskell a base do sistema de tipos e como os dados são usados - tipos de dados algébricos, correspondência de padrões, inferência de tipos etc. Eles podem diferir substancialmente de Haskell em outros pontos, é claro - a maioria dos MLs é rígida e impura , para começar, e a popularidade de Haskell como veículo para pesquisa em sistemas de tipos e design de idiomas significa que a maioria das linguagens no estilo ML tendem a ter sistemas do tipo menos poderosos (mas potencialmente mais fáceis de entender). Provavelmente é seguro dizer que, embora você possa sentir faltaalgumas coisas sobre Haskell, particularmente no início, a maioria dos programadores de Haskell provavelmente se sentiria confortavelmente em casa em um ML muito rapidamente, em um nível básico de fazer as coisas. Se você quer um idioma com a mesma estrutura geral que Haskell, um ML é sua melhor aposta.
O lado funcional do Scalatambém se apóia fortemente na tradição da ML e também traz alguns recursos avançados do sistema de tipo familiar da Haskell, além de um sistema OOP mais padrão integrado ao descrito acima. Enquanto o OO em linguagens no estilo ML tende a ser abordado como mais um "modelo OO com ferramentas funcionais básicas" Scala vive e respira OO no estilo Java. Isso traz benefícios para a interoperabilidade Java, como você pode imaginar, e apresenta um ambiente de trabalho mais familiar para os programadores de OO. No entanto, vindo de um plano de fundo Haskell, é mais provável que você fique irritado com as maneiras pelas quais as coisas combinadas no Scala tornam os idiomas funcionais desajeitados e ache a maioria das APIs Java mal projetadas e desnecessariamente difíceis de usar.
Finalmente, embora possa parecer estranho considerar, Clojure realmente tem muitas coisas em comum com Haskell em um nível mais filosófico. A maior parte do que você encontrará na abordagem de Clojure de estado e valores versus identidades está muito próxima do que Haskell formaliza através do sistema de tipos. Do mesmo modo, Clojure enfatiza a interoperabilidade Java em um grau menor e não se preocupa tanto em arrastar no OOP; portanto, de alguma maneira, a abordagem do Clojure à programação funcional em si pode estar mais próxima do que você já conhece. Eu acho que é revelador a esse respeito que, até onde eu sei, Clojure é a única linguagem além de Haskell que possui uma implementação do STMisso é simples, eficaz e simplesmente funciona. Por outro lado, Clojure vem da tradição Lisp e, portanto, carece do sistema de tipos estático e da ênfase nos tipos de dados algébricos e na correspondência de padrões encontrados nas linguagens influenciadas por ML. E é claro que é um Lisp, que é negativo para algumas pessoas (embora eu realmente não saiba o porquê).
Falando por mim, com o aviso de que minha primeira experiência com programação funcional foi em Scheme, eu provavelmente me inclinaria para Clojure, com OCaml como uma segunda opção provável.
Eu nunca o usei, mas às vezes vejo o Scala aparecendo em blogs ou descrições de projetos e acredito que foram necessários conceitos importantes de Haskell. O Scala é compilado na JVM e pode interoperar com Java.
fonte
Uma alternativa funcional é Erlang . Embora seja uma linguagem muito concorrente, o subconjunto seqüencial é uma linguagem funcional pura com muitas das propriedades das linguagens funcionais, por exemplo, fechamentos, dados imutáveis e correspondência de padrões. Ele roda em muitas plataformas, incluindo linux, vários unixes, janelas e macosx. Agora existe até uma implementação na JVM, erjang . Ele pode se comunicar facilmente e coexistir com outros idiomas; é assim que é frequentemente usado.
Confira o site principal .
fonte
O Clojure é cada vez mais utilizado e, embora não pareça Haskell em um nível superficial, se você parecer um pouco mais profundo, é claramente muito inspirado por Haskell e incentiva um estilo funcional muito semelhante.
Os principais recursos do Clojure que os usuários do Haskell podem achar familiares e atraentes:
Principais diferenças (podem ser positivas ou negativas, dependendo da sua perspectiva):
Perspectiva pessoal: eu aprendi Haskell antes de Clojure e amei Haskell por sua elegância e pureza matemática. Clojure tira muita inspiração e empresta muitos recursos bons de Haskell, mas é um idioma muito mais pragmático / prático. Especialmente quando você conta o enorme valor de poder aproveitar o ecossistema da biblioteca Java, é uma ótima linguagem para "fazer as coisas".
fonte
Se você gosta de Haskell, mas precisa criar código para a JVM, o frege pode ser interessante para você. Ele foi projetado para ser o mais próximo possível do Haskell 2010, mas gera código Java.
Obviamente, o frege em si não é nada como "linguagem de produção amplamente usada" (é publicada recentemente), mas o Java é certamente.
fonte