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.