modules functors

Module functors (which are different from the Haskell notion of functors!) are modules that take module types as arguments. This is useful because the module functor can define proofs that depend on the interface specified by the module type, so the proofs don't need to be repeated.

E.g., you can have a Module Type for Ord which specifies the less than or equal to operation. Instances of Ord could be natural numbers with the standard numerical less than or equal to operator, or something like strings with a lexicographical less than or equal to operator.