Packages in GHC 6.6

Simon Marlow simonmar at
Tue Aug 22 06:11:46 EDT 2006

Here is what I propose to do regarding the libraries we ship with GHC
6.6.  Comments are appreciated, since we need to finalise this story
before the release candidate at the end of this week.

For a while we have had the goal of devolving as many of the libraries
that ship with GHC as possible.  With Cabal, this is now possible: you
can download GHC and then install 3rd-party packages with little hassle,
or upgrade libraries that came with your GHC installation.  

So the days of the monolithic GHC+libraries installations should perhaps
come to an end.  On the other hand, it's often quite useful to be able
to install a single distribution and get a comprehensive set of
libraries.  The folks who package GHC for the deeply package-based OSs
like Debian, Gentoo and *BSD would like GHC to come with a minimal set
of libraries and install the others as separate packages.

Another consideration is that it's useful for our nightly builds to
build as many libraries as possible, so we can help catch bitrot.
However, the default GHC build now takes a very long time mostly due to
the huge set of libraries, and most people building GHC don't need to
build eg. OpenGL by default.  What's more, the maintainers of many of
these libraries would like to be able to make releases independently of

So here's what I propose:

 - A "GHC source tree" will contain a core set of packages.  This is
   what you will get if you download ghc-6.6-src.tar.bz2, or do
   "sh darcs-all get" in a darcs repo.  The core packages are:

      base, haskell98, template-haskell, readline, stm, 
      Cabal, unix, Win32
   plus hopefully regex-base and regex-posix if I integrate them this
   week.  These are the packages required to bootstrap GHC, or those
   with deep GHC dependencies (template-haskell & stm).

 - The core packages will have a stable API across patchlevel
   releases of GHC (perhaps with the exception of Cabal).  We will
   fork the darcs repos of the core packages where necessary.

 - A source tree can optionally be populated with more packages,
   which will be included in the build as normal.  At the moment,
   the only packages you can add in this way are:
     ALUT, HGL, HUnit, OpenAL, OpenGL, QuickCheck, X11, cgi,
     fgl, haskell-src, html, mtl, network, parsec, time, xhtml

   because we're still using GHC's build system to build packages
   rather than Cabal.  When we switch to using Cabal to build
   packages inside a GHC build, then it will be possible to populate
   the tree with any Cabal package.  

   Possibly we could also distribution an "extra libs" source
   bundle containing these packages.

 - We will continue to build all these packages in the nightly
   builds.  (but perhaps build failures in optional packages should
   not break the whole build).

 - darcs-all will have an option to grab the optional packages (all
   the packages in the list above).

 - Gentoo, Debian etc. will include only the core packages with GHC,
   the others will become separate entities.

 - We will continue to bundle the .tar.bz2 binary distributions, and
   the Windows installer, with all the optional packages.  Perhaps
   there could also be minimal installers containing just the core

 - We may have to change the set of core packages in the future, if
   GHC accumulates more dependencies for example.

Any comments, or suggestions?


More information about the Libraries mailing list