import resolution (was RE: exposed packages and cabal depends)
simonmar at microsoft.com
Tue Apr 19 07:44:38 EDT 2005
On 15 April 2005 23:45, S. Alexander Jacobson wrote:
> On Thu, 14 Apr 2005, Simon Peyton-Jones wrote:
>> The Right Thing to
>> do must be to regard the "full module name" as being the package name
>> pre-pended to the module name.
> I don't think that is right. As far as I understand, module names in
> import statements identify specifications not implementations.
> Otherwise, it would be incorrect for different compilers to implement
> the Prelude differently. Resolution of imported module names to
> meanings or specifications is fundamentally different from resolution
> of module names to implementations. The former is the domain of the
> programmer and the later is the domain of the compiler/interpreter.
No, a module name specifies a module, that's all. A Haskell program
currently consists of a collection of modules, each with a distinct
If the overlap restriction were lifted, a Haskell program would consist
of a collection of modules, each of which is identified by a distinct
(module name, package name) pair. This is what Simon is referring to in
the comment above.
You apparently want to impose a further restriction: that a module name
identifies an interface. The same interface, for all time. That sounds
like a pretty restrictive world to live in! We can't ever change the
interface of a module without changing its name, which would lead to
lots of weird module names and probably version numbers cluttering up
the module namespace.
>> b) We worry about error messages like "cannot unify M.T with M.T"
>> (meaning different M's!)
> I think the Haskell report is pretty clear that M.T always means M.T.
> So, I interpret this as an error in the status quo that can result
> from multiple packages requiring conflicting implementations of M.
If we lifed the module overlap restriction (what this discussion was
about), then a program could contain multiple Ms, and therefore multiple
M.Ts, which would be incompatible.
[ rest of post deleted.. I'll answer the later version ]
More information about the Libraries