So it seems the debate went on anyway. I had written something, but when just before posting i saw Brian Hurt's post, and decided not to. It now seems i was wrong, and actually (when reading the others) my post seems quite balanced after all.
I'm not saying that the other posters are biased in any way. But i have the point of view of someone trying to learn a language "for fun" and in order to discover interesting features or novel point of views. It seems Haskell do much better in that context that in the "use it to do something useful in the cruel world" context used so far.
So here is my original post :
I'm afraid your question is a bit too general (and it seems strange to
ask that on the mailing-list of one of the projects, while asking for a
balanced answer).
The main differences are :
OCaml is impure (imperative features in the language), Haskell is pure.
OCaml is strict, Haskell is lazy.
Ocaml has modules, Haskell has type classes.
If you're coming from the imperative land, OCaml is, in my opinion, easier to learn.
It
is also a good choice to begin with OCaml because everything you learn
with the OCaml basics can be reused for learning Haskell (the converse
is also true, but then you have to learn lazy evaluation first, wich is
a non-trivial shift, and is vastly less used in OCaml).
Haskell is certainly worth the effort, but my personal opinion is that
learning OCaml first is a good idea. Moreover, for "real world"
application, you may prefer OCaml over Haskell.
The
syntax are different, but not so much (before learning haskell, i could
generally understand the purpose of tiny haskell sources). I have heard
some people say they prefer the Haskell syntax, but this is more a
matter of taste (and not very relevant if you want to learn something
from the language semantics). Both have their ugly sides.
Idiomatic OCaml implementations tend to produce more efficient than
Idiomatic Haskell implementations (but Haskell compilers are getting
better and better everyday (for Haskell performances to be good, compilers have to do lots of clever and not so simple optimizations), and Haskell is faster than most (scripting)
languages used these days anyway).
The Haskell standard library is bigger than the Ocaml one, but this
is probably not an advantage for beginners (because this means more
time spent in browsing the doc, while playing with the language and
reimplementing functions yourself is much more interesting). Haskell program thus tends to be more terse and "higher-level" (because of reusing a lot of higher-order combinators in the stdlib): OCaml is also very expressive, but the simplicity of the stdlib tends to keep people on simpler things.
To the advanced programmer, both languages have interesting
advanced features to offer. Haskell tends to specialize in
sophisticated type system features, whereas OCaml has an interesting
object system, and polymorphic variants. Both languages have very interesting derivatives, specific languages intended to explore a specific area (concurrency, metaprogramming, etc...).
Camlp4 is a flexible and powerful Ocaml preprocessor. Haskell has
some tools in that direction, that i have never used (so i'm mostly
guessing here), but they seem to be even less supported and used
inside the community.