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.