Having worked professionally with both, I'd say OCaml has a gentler learning curve, but you have to do more work forever after getting over the curve.
Why do you suppose that is? Lack of type classes/overloading?
List.serialize (Option.serialize Int.serialize) my_list
There are also some things about the language that break composability. For example, the presence of mutable references means you can't compose polymorphic functions (sounds weird, I know), which is inconvenient.
It basically boils down to less ability to front-load work by creating good abstractions.
Re:composing polymorphic functions, I'm not sure I follow. Do you mean the value restriction?