|Version 6 (modified by 11 years ago) (diff),|
Module System oddities
There are inconsistencies in the current module system that cause confusion for users and complications for implementors. The issue is that while import, export, and hiding declarations have the same syntax, they have slightly different interpretations when it comes to names in the typespace.
In particular capital names are treated as types or classes in imports and exports but are treated as types, classes or value constructors in hiding clauses and there is no way to export just a constructor if it has the same name as a type.
Make bare capital names _always_ refer to value constructors, the presence of a subordinate list will mean it should be interpreted as a type or class.
so T will refer to a constructor always and T() will refer to a class or type always.
this same rule will be used uniformly in export,import, and hiding lists.
This will not only make everything consistant, but allow seperate decisions on whether to export a value or type constructor if they have the same name.
see section 9 of the following paper for more details: