
Ketil Malde wrote:
Simon Marlow
writes: Wouldn't keeping "base-2.0" and rebranding "base-3.0" to "foundation-1.0" (which might be listed as "Solution 2.1") solve this issue?
This is actually what proposal 4.2 is about.
Oh, I didn't catch that - I guess I didn't (and don't) see the connectiong to 4 (re-exporting of modules from other packages), nor does 4.2 seem to say anything about naming base differently.
Looks like an orthogonal issue to me. Am I missing something?
Probably it could be made clearer. In 4.2 the idea is that instead of replacing base-2.0 ==> base-3.0 + directory-1.0 + array-1.0 + ... you would replace base-2.0 ==> newbase-1.0 + directory-1.0 + array-1.0 + ... and additionally have a package base-3.0 that re-exports the whole of (newbase + directory + array + ...). An alternative to this last step, and I think what you had in mind, is to provide the original base-2.0; this is what proposal (2) talks about.
But note that in order to keep base-2.0 around you need to either compile up a complete copy of it and all the packages that depend on it (proposal 2, a non-starter IMO),
Perhaps the document could elaborate why it is a non-starter?
This is the "functional" solution: keep old versions of everything and GC them later. It's feasible for Nix to do this, indeed it requires a system like Nix to even make this work, because most OS packaging systems have no notion of the difference between "process-2.0 compiled against base-2.0" as distinct from "process-2.0 compiled against base-3.0", and neither does GHC's packaging system or Cabal. Also, this doesn't solve all the problems - if you need to use two packages, one of which only compiles against base-2.0 and the other only compiles against base-3.0, then in order to use them both in a program you almost certainly still have to modify one of them. The reason being that the types provided by base-2.0 (e.g. Bool) would be incompatible with those provided by base-3.0. Thinking about this is really making my head hurt, I need to go back to doing something easy like writing Haskell :-) Cheers, Simon