Haskell en çok ML dil ailesiyle ilişkilidir. Bu, elbette OCaml gibi şeyleri değil, aynı zamanda .NET platformundaki F # 'ı da içerir. Bu diller Haskell ile tip sisteminin temelini ve verilerin nasıl kullanıldığını paylaşmaktadır - cebirsel veri türleri, örüntü eşleştirme, tip çıkarımı, vb. Bunlar elbette diğer noktalarda Haskell'den önemli ölçüde farklı olabilir - çoğu ML katı ve saf değildir. başlangıç olarak ve Haskell'in tip sistemlerinde ve dil tasarımında araştırma için bir araç olarak popülerliği, ML tarzı dillerin çoğunun daha az güçlü (ancak anlaşılması daha kolay) tip sistemlere sahip olma eğiliminde olduğu anlamına gelir. Muhtemelen özleyebildiğini söylemek güvenlidirHaskell ile ilgili bazı şeyler, özellikle ilk başta, çoğu Haskell programcısı muhtemelen bir ML'de oldukça hızlı bir şekilde, temel bir şeyler yapma seviyesinde rahat hissedecekti. Haskell ile aynı genel yapıya sahip bir dil istiyorsanız , bir ML en iyi seçimdir.
Scala'nın işlevsel tarafıML geleneğinden de büyük ölçüde yararlanır ve ayrıca Haskell'den tanıdık bazı gelişmiş tip sistem özelliklerinin yanı sıra yukarıdakilere entegre edilmiş daha standart bir OOP sistemi de çeker. ML tarzı dillerde OO daha çok "temel fonksiyonel araçlarla model OO" olarak ele alınma eğilimindeyken, Scala Java tarzı OO'yu yaşıyor ve nefes alıyor. Bu, tahmin edebileceğiniz gibi Java birlikte çalışma için avantajlara sahiptir ve OO programcıları için daha tanıdık bir çalışma ortamı sunar. Bununla birlikte, bir Haskell geçmişinden gelen, Scala'da bir şeyleri karıştırmanın işlevsel deyimleri daha karmaşık hale getirme ve çoğu Java API'sinin kötü tasarlanmış ve gereksiz yere kullanımı zor olma yollarından rahatsız olma olasılığınız daha yüksektir.
Son olarak, dikkate alınması tuhaf görünse de, Clojure'un Haskell ile daha felsefi bir düzeyde ortak noktaları vardır. Clojure'un devlete ve değerlere karşı kimliklere yaklaşımında bulacağınız şeylerin çoğu, Haskell'in tür sistemi aracılığıyla şekillendirdiği şeye çok yakındır. Buna uygun olarak, Clojure, Java birlikte çalışmasını daha küçük bir dereceye vurguluyor ve OOP'de sürükleme konusunda endişelenmiyor, bu nedenle Clojure'un işlevsel programlamaya yaklaşımı, zaten bildiğiniz şeylere en yakın olabilir. Bence bu konuda söylüyorum, bildiğim kadarıyla Clojure, Haskell'in yanı sıra STM uygulaması olan tek dildir.bu basit, etkili ve sadece işe yarıyor. Öte yandan Clojure, Lisp geleneğinden gelmektedir ve ML'den etkilenen dillerde bulunan cebirsel veri türlerine ve desen eşleşmesine önem vermemektedir. Ve elbette bu bir Lisp, ki bu da bazı insanlar için olumsuzdur (nedenini bilmiyorum).
Kendim için konuşurken, fonksiyonel programlama ile ilgili ilk deneyimimin Scheme'de olduğu feragatiyle, muhtemelen Clojure'a yaslanacağım, OCaml muhtemelen ikinci bir seçim.