Haskell có liên quan chặt chẽ nhất với họ ngôn ngữ ML. Điều này bao gồm những thứ như OCaml , tất nhiên, nhưng cũng có F # trên nền tảng .NET. Các ngôn ngữ này chia sẻ với Haskell nền tảng của hệ thống loại và cách sử dụng dữ liệu - các loại dữ liệu đại số, khớp mẫu, suy luận kiểu, v.v. , để bắt đầu, và sự phổ biến của Haskell như một phương tiện để nghiên cứu về các hệ thống loại và thiết kế ngôn ngữ có nghĩa là hầu hết các ngôn ngữ kiểu ML có xu hướng có các hệ thống loại ít mạnh hơn (nhưng có thể dễ hiểu hơn). Có thể an toàn để nói rằng trong khi bạn có thể bỏ lỡMột số điều về Haskell, đặc biệt là lúc đầu, hầu hết các lập trình viên Haskell có thể sẽ cảm thấy thoải mái khi ở nhà trong một ML khá nhanh, ở mức độ hoàn thành công việc cơ bản. Nếu bạn muốn một ngôn ngữ có cấu trúc tổng thể giống như Haskell, ML là lựa chọn tốt nhất của bạn.
Mặt chức năng của ScalaCũng rút ra rất nhiều từ truyền thống ML, và cũng có một số tính năng hệ thống tiên tiến quen thuộc từ Haskell, cũng như hệ thống OOP tiêu chuẩn hơn được tích hợp với phần trên. Trong khi OO trong các ngôn ngữ kiểu ML có xu hướng được tiếp cận như là một "mô hình OO với các công cụ chức năng cơ bản" Scala sống và hít thở OO kiểu Java. Điều này có lợi ích cho việc can thiệp Java, như bạn có thể tưởng tượng và thể hiện môi trường làm việc quen thuộc hơn cho các lập trình viên OO. Tuy nhiên, đến từ nền tảng Haskell, bạn sẽ khó chịu hơn bởi những cách pha trộn mọi thứ với nhau trong Scala làm cho các thành ngữ chức năng trở nên vụng về và thấy hầu hết các API Java được thiết kế tồi và khó sử dụng.
Cuối cùng, trong khi có vẻ kỳ lạ để xem xét, Clojure thực sự có rất nhiều điểm chung với Haskell ở cấp độ triết học hơn. Hầu hết những gì bạn sẽ tìm thấy trong cách tiếp cận trạng thái và giá trị của Clojure so với danh tính rất gần với những gì Haskell chính thức hóa thông qua hệ thống loại. Tương ứng, Clojure nhấn mạnh Java can thiệp ở mức độ nhỏ hơn và không lo lắng nhiều về việc kéo vào OOP, do đó, theo một số cách, cách tiếp cận của Clojure đối với lập trình chức năng có thể gần nhất với những gì bạn đã quen thuộc. Tôi nghĩ rằng nó nói về vấn đề này, theo hiểu biết tốt nhất của tôi, Clojure là ngôn ngữ duy nhất ngoài Haskell có triển khai STMđó là đơn giản, hiệu quả và chỉ hoạt động. Mặt khác, Clojure xuất phát từ truyền thống Lisp và do đó thiếu hệ thống kiểu tĩnh và nhấn mạnh vào các kiểu dữ liệu đại số và khớp mẫu được tìm thấy trong các ngôn ngữ chịu ảnh hưởng ML. Và tất nhiên đó là một Lisp, bản thân nó là một tiêu cực đối với một số người (mặc dù tôi thực sự không biết tại sao).
Nói về bản thân tôi, với sự từ chối rằng trải nghiệm đầu tiên của tôi về lập trình chức năng là ở Scheme, có lẽ tôi nghiêng về Clojure, với OCaml là sự lựa chọn thứ hai.