module namespaces with "Prelude"

Hal Daume III hdaume@ISI.EDU
Tue, 23 Apr 2002 07:21:19 -0700 (PDT)


It happens in Hugs, too, but somewhat differently.  Here's a test case.

Go to /foo and do mkdir Bar.  In Bar, create IO.hs and make its contents:

  module Bar.IO where

then also in Bar create Foo.hs

  module Bar.Foo where
  import IO

Then when in directory Bar load ghci (using 5.02.1) and load Bar.Foo and
you'll get:

  IO.hs: file name does not match module name `IO'

Quit ghci, load hugs and load Bar.Foo and you'll get:

  ERROR "Foo.hs" - Module "IO" not previously loaded

(worse things can happen in hugs -- if say Bar.IO imported Bar.Foo and
plain Bar.Foo imported plain old IO hugs will complain about cyclic
modules)

if you are in /foo instead of /foo/Bar when you load ghci and set paths
correctly it will work.

I don't know that this is exactly a bug in the software as much as it's
just somewhat underspecified what to do in these situations (I could be
wrong though).  IMO if you say in an import "import XXX" and it looks in
XXX.(l)hs and the module names is "YYY.XXX" it should keep looking instead
of just dying.  I don't really know what repurcussions this will have,
though.

--
Hal Daume III

 "Computer science is no more about computers    | hdaume@isi.edu
  than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume

On Mon, 22 Apr 2002, Simon Peyton-Jones wrote:

> Hal,
> 
> If your question is GHC-specific, send it to ghc-users not the haskell
> list.
> 
> And it would save time if you could be more specific.   Say what
> compiler
> you are using, enclose a test case, etc.  Otherwise we're all guessing.
> 
> Simon
> 
> | -----Original Message-----
> | From: Hal Daume III [mailto:hdaume@ISI.EDU] 
> | Sent: 23 April 2002 03:21
> | To: Alastair Reid
> | Cc: Haskell Mailing List
> | Subject: Re: module namespaces with "Prelude"
> | 
> | 
> | Ah, so the problem was that even though I had the superdir of 
> | NLP in my path, I was actually loading the modules in ghci 
> | from the NLP directory.  Still, I find this behavior odd, 
> | since even if I were in the NLP directory I could not import 
> | "NLP.Foo" simply as "Foo", I don't see why I should be 
> | allowed to (try to) import "NLP.Prelude" simply as "Prelude", 
> | thus messing stuff up...
> | 
> | --
> | Hal Daume III
> | 
> |  "Computer science is no more about computers    | hdaume@isi.edu
> |   than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume
> | 
> | On 23 Apr 2002, Alastair Reid wrote:
> | 
> | > 
> | > >>>>> "#Hal" == Hal Daume <hdaume@ISI.EDU> writes:
> | > 
> | > > I'm developing my package "NLP" for supporting common NLP 
> | functions 
> | > > and have a set of functions/datatypes that are common to 
> | almost all 
> | > > of my modules and I wanted to separate them off into an 
> | > > "NLP.Prelude" file, but this seems not to work.  One of 
> | my modules 
> | > > imports Prelude (the Haskell one) directly so I can hide a few 
> | > > definitions, but then it looks at NLP/Prelude.lhs and 
> | complains that 
> | > > the name of that module "NLP.Prelude" doesn't match "Prelude". 
> | > > SHould I simply name my module "NLP.NLPPrelude" or 
> | something (which 
> | > > is ugly, imo) or what?
> | > 
> | > The only change that hierarchial module namespaces make is that the 
> | > dots become a legal part of the name and that compilers have a 
> | > sensible way of mapping them onto filenames such as 
> | replacing dots by 
> | > slashes.  So, under the new scheme, these names are different and 
> | > unrelated
> | > 
> | >    Prelude   NLP.Prelude   User.Hal.Daume.NLP.Prelude
> | > 
> | > in the same way that these names were different and 
> | unrelated in the 
> | > old scheme.
> | > 
> | >    Prelude   NLP_Prelude   User_Hal_Daume_NLP_Prelude
> | > 
> | > If you are seeing something other than that, the problem is 
> | with your 
> | > compiler or the way you are using command line arguments to your 
> | > compiler (e.g., Hugs' import chasing mechanism has some interesting 
> | > interactions with hierarchial namespaces) and you should 
> | say which one 
> | > you're using and how you're using it.
> | > 
> | > --
> | > Alastair Reid
> | > 
> | 
> | _______________________________________________
> | Haskell mailing list
> | Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell
> | 
>