modules, classes, instances

Fergus Henderson fjh@cs.mu.oz.au
Sun, 16 Dec 2001 18:52:16 +1100


On 14-Dec-2001, David Feuer <David_Feuer@brown.edu> wrote:
> Well, I've been doing some more stupid thinking, and I've decided that I
> am not satisfied with the module system in haskell, or the way it deals
> with namespaces.  It seems to me that there are four kinds of things
> that need to be dealt with: classes, instances, types, values, and
> possibly some kind of ML-style structures/functors.
> 
> I see no good reason not to treat a class declaration similarly to the
> way Haskell treats modules.  For example, if I have a class
> 
> class A x where
> 	f1::...
> 	f2::...
> 
> I would like to access the functions by writing
> A.f1, A.f2, etc.  There should, however, be some way to unqualify the
> names, the way ML allows structures to be opened.

A proposal very similar to this has recently been suggested on the
mercury-developers mailing list [1].  This proposal, and others
related to it, have then been discussed at some length.
See the threads titled "Module qualification of typeclass methods" [1]
"Automatic inclusion of modules" [2], and "Module system discussion" [3].

One drawback with this proposal was noted by Simon Taylor:

 | The proposal is also a step backwards for classes that are already
 | defined in a module of the same name, for example library/enum.m.
 | With the proposed change, the methods of that class would be
 | enum__enum__to_int and enum__enum__from_int.

> Finally:  I want nested modules!!!  They probably couldn't be compiled
> separately, but they'd provide some namespace control.

Mercury supports separate compilation of sub-modules.
Mercury has two kinds of sub-modules, "nested modules",
which are physically nested in the same source file,
and "separate sub-modules", where the parent (containing) module
just contains a `:- include_module' declaration naming the child
module, and the source code for the child module occurs in a
separate file.  You get separate compilation of separate sub-modules.

[1] <http://www.cs.mu.oz.au/research/mercury/mailing-lists/mercury-developers/mercury-developers.0110/0066.html>
[2] <http://www.cs.mu.oz.au/research/mercury/mailing-lists/mercury-developers/m
ercury-developers.0111/0082.html>
[3] <http://www.cs.mu.oz.au/research/mercury/mailing-lists/mercury-developers/m
ercury-developers.0111/0097.html>.

-- 
Fergus Henderson <fjh@cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.