Ask HN: Clojure vs. Haskell?

5 points by colobas ↗ HN
Which of these would you recommend to someone with zero experience in functional programming?

5 comments

[ 1.6 ms ] story [ 19.3 ms ] thread
Which language(s) do you know already? If it's possible, have you looked at the state of FP in something you're already familiar with?

For example, this guide in JavaScript is pretty good: https://github.com/MostlyAdequate/mostly-adequate-guide/

Or in Ruby, while you still have to create classes, you could explore writing pure functions and not changing state.

Personally I feel like there's too many stumbling blocks in both those languages (unless you've got Lisp experience or are really into mathematics), and just getting used to the concepts in a more familiar environment will be more useful than scratching your head about monads.

C and Python are the languages in which I've done most of my work (I'm still a student). In fact I didn't look to see how's FP done in those languages with which I'm most familiar and that does sound like good advice. Thanks!
For a student, I would recommend Racket over Haskell and Clojure because:

1. It is very easy to set up a batteries included development environment.

2. The community is dedicated to teaching students functional programming principles.

3. The Racket ecosystem provides tools for learning other programming paradigms including: lazy, statically typed, declarative, reactive, meta-programming, etc.

4. The sweet spot of Clojure is professional developers. There is often an assumption of foundational knowledge of the JVM [or Javscript in the case of Clojurescript].

5. The sweet spot of Haskell is programmers with a strong computer science background. The literature and discussion tends to be more toward the academic journal paper end of the spectrum.

Good luck.

It depends: what do you want to build? I like Clojure a bit more, and for me the JVM + ClojureScript are a deal. I like Haskell's syntax a bit less, though Haskell types rock; the ecosystem is less developed as you cannot just import a gazillion of mature Java libraries.