Whoops. Forgot to hit "reply all". On Wed, Aug 13, 2008 at 4:58 PM, Andrew Coppin <[EMAIL PROTECTED]> wrote: > The naming of cats is a difficult matter... > > Ahem. So as you may have noticed, we seem to have a profusion of packages > all called "binary" or something dangeriously similar. There's also several > "MD5" packages. I could point out a few others. So what I'm wondering is... > Do we have a formal convention for the naming of packages and/or the naming > of the modules they contain? How are name collisions supposed to be avoided? > (E.g., Java uses domain names for this. If I write a package named Foo, I > put all the classes in orphi.me.uk.Foo.*)
So far as I know, there are no rules about naming packages, except that Hackage won't allow two packages with the same name. There is a loose convention about fitting modules into the larger hierarchy. Personally, I think trying to fit modules from different packages into the same hierarchy is a mistake, in that you either get the same module name used twice (meaning that both packages can't be used in the same program), or need to insert the package name into the name. Thus, "Test.HUnit", "Test.QuickCheck", "Text.ParserCombinators.Parsec", "Text.Pretty.HughesPJ", and so forth. We'd be better off just using the package name as the first element of the module names. Or, if that's objectionable, using something like "Package.Parsec" or "Lib.Parsec" (or "Hackage.Parsec", since Hackage enforces the uniqueness of package names). This is arguably one area where Java does better than Haskell. The resulting module names are long, but they don't require coordination and they don't raise tricky questions. (Quick, what's the difference between Data.* and Control.*? Is QuickCheck under Debug.* or Test.*?) -- Dave Menendez <[EMAIL PROTECTED]> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe