In addition to the mutable records mentioned in the post, arrays and references are also mutable in OCaml. Aside from objects, I consider this impurity to be the biggest difference in practice. Mutability allows simple OCaml solutions to problems that would otherwise demand monadic gymnastics in Haskell.<p>FWIW, I've also never been able to design a large project in Haskell (a la darcs), whereas I could write fairly large projects in OCaml without much awkwardness. I suspect the ability to "cheat" with mutability outweighs in practical terms the theoretical elegance and enjoyment of programming in Haskell.