How do you reuse existing classes in a way the programmer had not originally considered?
"Ideally, one would like a module system that allows programmers to piece together chunks of code like tinker toys. The OCaml module system, like other ML variants, is a really solid step in that direction. It has structures, which are like classes but without inheritance, that collect and name a chunk of code. It has signatures, which are like interfaces, that simply have the code type signatures without the actual code. Finally, they have functors, which Java doesn't have, which allow programmers to write parameterized structures."