Proposal: module namespaces.

Malcolm Wallace Malcolm.Wallace@cs.york.ac.uk
Tue, 27 Feb 2001 17:30:59 +0000


Ashley writes:
> In fact, whatever you decide it's likely to happen anyway, since people 
> will decide that for instance "Com.Microsoft.Research.MyModule" is 
> unlikely to clash with anyone outside the appropriate domains and 
> subdivisions.

Yes, we expect companies to develop their own hierarchies if they
so wish.  I don't know whether the domain prefixes Com. Net. Org.
and country codes Us. Uk. Fr. etc are strictly necessary - as I
understand it, Java is moving to allow "vendor." as a synonym for
"com.vendor."

> I'm assuming that module name components have enforced capitalisation, 
> like all other Haskell identifiers.

A namespace is a dot-separated sequence of conids, therefore yes,
there is enforced capitalisation.

> Eeesh, let's hope ICANN doesn't register a 'std' TLD. I would prefer 
> "Standard" for this reason and also because the abbreviation seems pretty 
> pointless.

If Std. is going to be the common case, people will complain about
having to type the extra five characters.  Normally I would say spell
it out in full is the best rule.  Here, I'm prepared to compromise
a little.

> Do you have any kind of guarantees of copyright openness in mind? In 
> Java, everything under java.* is supposed to be owned by Sun.

All standard libraries will be copyright to their authors, but must
be released under an open source licence.  (For instance Hugs at the
very least will require the source.)  Ideally, I think they should
all have the same licence.  We need to decide which.  LGPL?  BSD?
Any opinions?

> Will it be standard practice for versions of Standard be included with 
> Haskell compilers?

This is the intention.

> Could the Prelude make use of Standard?
> Could Standard become an alternative to the Prelude?

In principle yes.  One notable omission from my hierarchy layout
proposal is the current Haskell'98 standard libraries.  Should they
remain at the toplevel?  Or should they become

    Standard.Prelude
    Standard.IO
    Standard.List
    Standard.Monad

etc.?

Regards,
    Malcolm