A solid book which would get four stars if not for the following:
- Concurrency chapter is weak, although I acknowledge that this is a problem with OCaml in general. In 2013 it's not reasonable to have a weak chapter on concurrency.
- Not as good as its sibling, Real World Haskell. Unfortunately, I have read RWH and this book is a step down in terms of content and general quality. Perhaps the titles should have differed so that the reader didn't relate the two works. (This is not an issue for those who haven't read RWH.)
- In a number of situations the authors did not qualify why certain tools were used, which I found a shame. For example, why Core.Async as opposed to, say, Lwt, or similar? Where does Menhir sit w.r.t. ANTLR or parser combinators? Or, more fundamentally, why are we using Jane Street's overlay at all, other than one of the author's working there?
It's encouraging to see two new books on OCaml, and I hope that this sparks further knowledge investment in OCaml, which to a large extent, IMO, is being driven by the community around OPAM.
A veteran of more languages than I care to remember, I found this book unhelpful as an introduction to Ocaml. The approach of introducing concepts through examples didn't work well for me. It creates information overload unless you are already familiar with the language, its syntax and common functions. Answers to basic questions like 'what is a module' or 'what is a class' somehow get buried a heap of examples. Even finding out how to run a 'hello world' program needed to be googled. So at best, the book can be used as a second string to online tutorials such as those in 'ocaml.org'. If you try to learn Ocaml from scratch using only this book, it will probably put you off for life!