We use monads extensively (with monad syntax provided by the ppx_let extension) and OCaml also has a sophisticated module system that is useful in a similar way that type classes are. I would say type classes and a good module system are essentially incomparable language features though, and programming in Haskell always feels painful to me once you get to a few files without modules.