Cabal vs Haskell [sic]
S. Alexander Jacobson
alex at alexjacobson.com
Thu Apr 21 19:06:03 EDT 2005
> I can see why you might object, if that were the case, but Cabal does
> NOT in fact determine the referent! Cabal is just a convenient way
> of grouping together the denotational /interface/ of a large bunch
> of modules. The implementations of those modules can be replaced at
> any time, provided they still meet the interface.
The Cabal spec says:
build-depends: package list
A list of packages, possibly annotated with versions, needed to
build this one, e.g. foo > 1.2, bar. If no version constraint is
specified, any version is assumed to be acceptable.
http://www.haskell.org/ghc/docs/latest/html/Cabal/authors.html
I interpret "needed to build this one" as requirement rather than
recommendation. So I interpret build-depends as determining the
referent.
Moreover, I think Simon does too. He proposes that we should lift the
overlap restriction by having module names map to (cabal-package,
module) pairs. To me, that only makes sense if build-depends is
determining the referent. He acknowledges that a consequence of this
is that you risk errors like "can't unify (package foo, M.T) with
(package bar, M.T)"!
I am arguing instead that all modules in all packages used by a
program should share the same referent for M.T, that we need a
mechanism for establishing that referent, and that build-depends
doesn't do that.
I feel like we may actually be on the same wavelength here. Exciting!
-Alex-
______________________________________________________________
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
On Thu, 21 Apr 2005, Malcolm Wallace wrote:
> "S. Alexander Jacobson" <alex at alexjacobson.com> writes:
>
>> I think I must be communicating extremely poorly here, because I think
>> you are interpreting me to be saying something largely opposite what I
>> think I am saying.
>
> Well I must admit several of us have been having difficulty
> understanding what your point is. But we seem to be getting nearer
> to it now. :-)
>
>>> The Haskell source does not
>>> now, and never has, determined the referent of an import statement.
>>> That has /always/ been external to the language.
>>
>> Yes, that is precisely my point! My objection to Cabal is that it in
>> fact DOES determine the referent of an import statement
>> (build-depends).
>
> I can see why you might object, if that were the case, but Cabal does
> NOT in fact determine the referent! Cabal is just a convenient way
> of grouping together the denotational /interface/ of a large bunch
> of modules. The implementations of those modules can be replaced at
> any time, provided they still meet the interface.
>
> At least, for some compilers (Hugs, nhc98) this is true, so I figure it
> is true in general for the Cabal model, and indeed the Haskell model.
>
> I believe the real problem you are objecting to is that a highly
> optimising compiler like ghc (or indeed the new jhc) DOES NOT SOLELY
> RELY ON THE INTERFACES of imported modules when it compiles another
> library module that uses them. These compilers do all kinds of
> cross-module optimisation, and therefore know a lot more about the
> actual implementation of the lower modules than just function names
> and type signatures. Hence, you cannot rip-and-replace a lower module
> at will, without also recompiling all higher modules that depend on it.
> Again, to be clear, this is ONLY in certain optimising compilers.
>
>> To be more precise, I believe that module names in import statements
>> have a *denotational* meaning e.g Prelude refers to a set of functions
>> defined in the Report and Data.List refers to a set of functions
>> defined in the Standard Libraries.
>
> Yes, I can see the general idea here. Unfortunately, Haskell doesn't
> have a particularly user-accessible notion of denotational interface,
> unlike Ada for instance. I think it would be nice if Haskell
> 2 could allow the user to write explicit interfaces, including
> properties beyond mere type signatures - especially if there is
> good semi-automated verification support for those properties.
> (I thinking QuickCheck, Programmatica, Alfa...) That would make
> it easier to replace the implementation of a module by a "better"
> one whilst guaranteeing it still does the "same" thing.
>
> Regards,
> Malcolm
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
More information about the Libraries
mailing list