Functional Programming in OCaml
I don't know why they felt they had to mess with OCaml's syntax - one of the nicest around AFAIC.  With F#, even MS didn't feel like they had to add extra braces and other baggage and change keywords ("match" to "switch ()", etc.) to make C# programmers have an easier first ten minutes of transition time.