One problem I've commonly encountered in OCaml is the inability to expand the interface of functors after they've been created (I'm not talking about post-application). For example, Map.Make in the stdlib takes an OrderedType module which contains only the compare function. What happens if I want to add something to this interface, such as a show function? I have to copy the whole implementation of Map.Make into my own file to modify it. Compare this to the ability to 'include' a regular module and just add the new functionality, and to take the type of a module and expand that type as needed. Functors are severely lacking in this regard. 

What do people think of this idea -- of allowing functors to be expanded? Ideally, expanding a functor would allow for both replacing its argument type (as in the example I gave) and for adding a second/third functor argument type (so Map.Make(OrderedType) would become Map.Make(OrderedType)(Show).

-Yotam