OCaml's modules, like Java's interfaces, but unlike Lisp generic function protocols or Haskell typeclasses, suffer from the painful "can't retroactively make something conform to an interface" problem. Particularly acute for free software libraries extending each other.
Yes, now reinstantiate a few dozens of functors that used to use Foo but need to use XFoo instead. Each and every time you extend it. And if you want to extend or override even one method rather than plainly include it, you need to explicitly wrap each and every method.
Read my blog!