Problem with hierarchical libraries in Hugs compared to ghc/nhc98
Ross Paterson
ross@soi.city.ac.uk
Wed, 12 Mar 2003 10:16:29 +0000
On Mon, Mar 10, 2003 at 07:53:57PM +0000, Olaf Chitil wrote:
> Ross Paterson wrote:
> > In my opinion the correct fix is to add the directory only if the parent
> > module was specified with a path, or was itself found relative to that
> > added directory.
>
> I agree. So a search directory is only passed on recursively, if the
> imported module is actually found in that directory.
I've had a look, and it's not so hard to do what I suggested, but the
changes would be cleaner if the search strategy for module names, currently
[ d++f++e | f <- files, d <- dirs, e <- hugsSuffixes ]
where
dirs = addAlong ("" : hugsPath)
files = [mod2dir nm, nm]
addAlong
| wantImplicitRoot = (along:)
| otherwise = id
mod2dir s = map (\c -> if c=='.' then slash else c) s
were also changed to
[ d++f++e | d <- dirs, f <- files, e <- hugsSuffixes ]
i.e. swap the first two generators. I think that having the generator
order match the concatenation order is more comprehensible; it's also
closer to what GHC does (except GHC has files = [nm, mod2dir nm]).
It does sometimes mean checking a few more files before finding a match,
but not always adding the extra directory will also save some checks.
Any views?