
On 28 June 2005 07:34, Frederik Eaton wrote:
And for the same reason we have "exposed" packages, it makes sense to have a default set of grafting locations per user/system (this is debatable; indeed sometimes I think we should remove "exposed" completely and force non-Cabal users to write -package flags).
I'm not sure what this "same reason" is - exposed packages are a reason to require a faithful module namespace, and default grafting locations would help provide that, is this it?
The only reason to have "exposed" packages is so that you don't have to specify a bunch of -package options when invoking GHC or GHCi. It's convenient to be able to just import a hierarchical module without having to say which package it comes from. However, exposed packages are evil because there's no guarantee that different systems will have the same set of exposed packages, so code that compiled on one system may not compile on another. But this is no worse than the non-portability caused by different systems having different packages installed, or different versions of packages, or indeed different compilers. So our story for portability is that code which is intended to compile on more than one system must travel with its dependencies, where those dependencies include which packages (and versions) the code requires and which compiler options are required to compile it. All this information is stored in the .cabal file, so code is portable if it is a Cabal package. Grafting locations fit into this scheme nicely. Cheers, Simon

On Tuesday 28 June 2005 11:30, Simon Marlow wrote:
So our story for portability is that code which is intended to compile on more than one system must travel with its dependencies, where those dependencies include which packages (and versions) the code requires and which compiler options are required to compile it. All this information is stored in the .cabal file, so code is portable if it is a Cabal package. Grafting locations fit into this scheme nicely.
Yes. Nevertheless, I agree with Frederik that the package should only provide a default location in the module name space. I want to be able to override this default with a compiler flag, and possibly also in the .cabal file for the client application. Ben
participants (2)
-
Benjamin Franksen
-
Simon Marlow