Interesting discussion contrasting OCaml functors with Java interfaces: https://www.reddit.com/r/ocaml/comments/2gjcos/help_explaining_benefits_of_modules_and_functors
You can abstract over more things with functors, and they have some cool examples. Quaternions!
I also learnt that type checking modules is undecidable in general in OCaml.