Ticket #1150 (new enhancement)

Opened 6 years ago

Contained packages for Haskell

Reported by: ivanm Owned by:
Priority: Sometime Milestone:
Component: clients/cave Version: 0.60.3
Keywords: Cc:
Blocked By: Blocking:
Distribution: N/A


The  Glorious Glasgow Haskell Compiler (GHC) ships with a number of Haskell libraries; for example version 7.0.2 contains the libraries listed on  this page.

With one exception, these libraries - called "boot libraries" in GHC parlance - should not be upgraded or uninstalled. The sole exception to this is Cabal, which can be safely upgraded but should not be uninstalled (that is, newer versions are OK, but keep the current one around).

As such, to avoid mangling with exheres whenever a new release of GHC comes out (and to simplify adding native support for Haskell packages in Paludis), it would be preferred to have some way of GHC exheres to denote which boot libraries they ship with. Because of Cabal, this needs to come in two flavours:

  • Specify a package that is provided by GHC that cannot be upgraded or uninstalled (without uninstalling GHC).
  • Specify a package that is provided by GHC that cannot be uninstalled (ideally, it would also denote that older versions of this library cannot be installed, but this is probably not necessary).

As such, no filtering of the package dependencies is required; for example, in  this Haskell library, the base, bytestring, containers, extensible-exceptions, filepath, pretty and process libraries should not be actually installed by paludis, as they are provided by GHC.

I see three main problems with this:

  • Dep resolution becomes more complicated when newly installing any Haskell package: how does paludis know that the currently non-existing "containers" package actually comes with GHC?
  • When a package needs a newer version of a boot library, what is really required is that GHC be upgraded rather than that library be explicitly upgraded.
  • Have to make sure that users don't install any of these boot libraries when native Haskell packages are available in paludis.
Note: See TracTickets for help on using tickets.