[Haskell] Re: Trying to install binary-0.4

Simon Marlow simonmarhaskell at gmail.com
Fri Oct 26 05:53:26 EDT 2007

Ketil Malde wrote:
> Simon Marlow <simonmarhaskell at gmail.com> 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 

  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 :-)


More information about the Libraries mailing list