Haskell paling dekat hubungannya dengan keluarga bahasa ML. Ini termasuk hal-hal seperti OCaml , tentu saja, tetapi juga F # pada platform .NET. Bahasa-bahasa ini berbagi dengan Haskell dasar sistem tipe dan bagaimana data digunakan - tipe data aljabar, pencocokan pola, inferensi tipe, dll. Mereka dapat berbeda secara substansial dari Haskell pada poin lain, tentu saja - kebanyakan ML ketat dan tidak murni , untuk mulai dengan, dan popularitas Haskell sebagai wahana untuk penelitian dalam sistem jenis dan desain bahasa berarti bahwa sebagian besar bahasa gaya-ML cenderung memiliki sistem jenis yang kurang kuat (tetapi berpotensi lebih mudah untuk dipahami). Mungkin aman untuk mengatakan itu sementara Anda mungkin kehilanganbeberapa hal tentang Haskell, terutama pada awalnya, sebagian besar programmer Haskell mungkin akan merasa nyaman di rumah dalam ML cukup cepat, pada tingkat dasar melakukan sesuatu. Jika Anda menginginkan bahasa dengan struktur keseluruhan yang sama dengan Haskell, ML adalah pilihan terbaik Anda.
Sisi fungsional Scalamenarik banyak dari tradisi ML, juga, dan juga menarik dalam beberapa fitur sistem tipe canggih yang akrab dari Haskell, serta sistem OOP yang lebih standar terintegrasi dengan di atas. Sementara OO dalam bahasa gaya-ML cenderung didekati sebagai lebih dari "model OO dengan alat fungsional dasar" Scala hidup dan bernafas OO gaya Jawa. Ini memiliki manfaat untuk Java interop, seperti yang Anda bayangkan, dan menghadirkan lingkungan kerja yang lebih akrab bagi programmer OO. Namun, berasal dari latar belakang Haskell, Anda lebih cenderung kesal dengan cara menggabungkan hal-hal bersama di Scala membuat idiom fungsional clumsier, dan menemukan sebagian besar API Java dirancang dengan buruk dan sulit digunakan.
Akhirnya, walaupun mungkin aneh untuk dipertimbangkan, Clojure sebenarnya memiliki banyak kesamaan dengan Haskell pada tingkat yang lebih filosofis. Sebagian besar dari apa yang akan Anda temukan dalam pendekatan Clojure untuk menyatakan dan nilai-nilai vs. identitas sangat dekat dengan apa yang diformalkan Haskell melalui sistem tipe. Sejalan dengan itu, Clojure menekankan Java interop ke tingkat yang lebih kecil dan tidak terlalu khawatir tentang menyeret dalam OOP, jadi dalam beberapa hal pendekatan Clojure untuk pemrograman fungsional itu sendiri mungkin paling dekat dengan apa yang sudah Anda kenal. Saya pikir itu menceritakan dalam hal ini bahwa, sejauh pengetahuan saya, Clojure adalah satu-satunya bahasa selain Haskell yang memiliki implementasi STMitu sederhana, efektif, dan hanya berfungsi. Di sisi lain, Clojure berasal dari tradisi Lisp dan dengan demikian tidak memiliki sistem tipe statis dan penekanan pada tipe data aljabar dan pencocokan pola yang ditemukan dalam bahasa yang dipengaruhi ML. Dan tentu saja itu adalah Lisp, yang itu sendiri negatif untuk beberapa orang (meskipun saya benar-benar tidak tahu mengapa).
Berbicara sendiri, dengan penafian bahwa pengalaman pertama saya dengan pemrograman fungsional ada di Skema, saya mungkin akan condong ke Clojure, dengan OCaml kemungkinan pilihan kedua.
Saya tidak pernah menggunakannya sendiri, tapi saya melihat Scala muncul di blog atau deskripsi proyek kadang-kadang dan saya percaya itu mengambil konsep utama dari Haskell. Scala mengkompilasi ke JVM dan dapat beroperasi dengan Java.
sumber
Alternatif fungsional adalah Erlang . Sementara itu adalah bahasa yang sangat konkuren, subset berurutan adalah bahasa fungsional murni dengan banyak sifat bahasa fungsional, misalnya penutupan, data tidak berubah dan pencocokan pola. Ini berjalan pada banyak platform termasuk linux, berbagai unix, windows dan macosx. Sekarang bahkan ada implementasi pada JVM, erjang . Itu dapat dengan mudah berkomunikasi dan hidup berdampingan dengan bahasa lain, ini adalah bagaimana itu sering digunakan.
Lihatlah situs utama .
sumber
Clojure semakin banyak digunakan, dan walaupun tidak terlihat seperti Haskell pada tingkat yang dangkal, jika Anda melihat sedikit lebih dalam, itu jelas sangat terinspirasi oleh Haskell dan mendorong gaya fungsional yang sangat mirip.
Fitur-fitur Clojure utama yang pengguna Haskell mungkin kenal dan menarik:
Perbedaan utama (mungkin positif atau negatif tergantung Anda perspektif Anda):
Perspektif pribadi: Saya belajar Haskell sebelum Clojure, dan menyukai Haskell karena keanggunan dan kemurnian matematisnya. Clojure mendapat banyak inspirasi dan meminjam banyak fitur bagus dari Haskell, tetapi merupakan bahasa yang jauh lebih pragmatis / praktis. Terutama ketika Anda menghitung nilai besar untuk dapat memanfaatkan ekosistem perpustakaan Java maka itu adalah bahasa yang bagus untuk "menyelesaikan sesuatu".
sumber
Jika Anda menyukai Haskell, tetapi harus membuat kode untuk JVM, frege mungkin menarik bagi Anda. Ini dirancang sedekat mungkin dengan Haskell 2010, namun menghasilkan kode Java.
Tentu saja, frege itu sendiri tidak seperti "bahasa produksi yang banyak digunakan" (itu baru saja diterbitkan), tetapi Java tentu saja.
sumber