[Hackage] #220: detect inconsistent package dependencies

Hackage trac at galois.com
Sun Jan 27 13:33:35 EST 2008


#220: detect inconsistent package dependencies
-----------------------------+----------------------------------------------
  Reporter:  duncan          |        Owner:         
      Type:  enhancement     |       Status:  new    
  Priority:  normal          |    Milestone:         
 Component:  Cabal library   |      Version:  1.2.3.0
  Severity:  normal          |     Keywords:         
Difficulty:  hard (< 1 day)  |   Ghcversion:  6.8.2  
  Platform:                  |  
-----------------------------+----------------------------------------------
 Now that packages are more fine grained and upgradeable we're commonly
 getting situations where we build a package that uses two other packages
 that were built against different versions of another common package.

 The most common example in the wild at the moment is people installing
 `bytestring-0.9.0.4` in addition to the `bytestring-0.9.0.1` that came
 with ghc-6.8.2 and then half their packages are built against one version
 and half against the other and when they try to use packages built against
 different versions we get a type error about
 `bytestring-0.9.0.1:Data.ByteString.ByteString` not being the same as
 `bytestring-0.9.0.4:Data.ByteString.ByteString`.

 Cabal could and should detect this situation, and `cabal-install` should
 plan around it in its dependency resolution algorithm. However in both
 cases we require the dependency information of the existing installed
 packages.

 See http://hackage.haskell.org/trac/ghc/ticket/1839

 The simplest thing is to get the full `InstalledPackageInfo` for all the
 packages in the package databases. From that we can find all the
 dependencies.

 When we do find this situation it is not guaranteed to cause a compiler
 error, it's just rather likely. So it's not obvious if Cabal should warn
 or error. `cabal-install` could try to fix up inconsistencies but in
 general only by re-installing existing packages against different versions
 of their dependencies.

 The longer term solution is to allow installing multiple instances of the
 same versions of a package built against different versions of its
 dependencies. This is the functional Nix approach however it would
 probably also require support from ghc.

-- 
Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/220>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects


More information about the cabal-devel mailing list