I recently submitted a pull request to Cabal to remove a block of code
that lived inside a CPP conditional, that I suspect had not been
compiled for years:
https://github.com/haskell/cabal/pull/1148
I think it would be beneficial if we came up with a policy that
allowed us to prune code like this more thoroughly: a clear statement
of what libraries and compilers, at what versions, we intend Cabal to
be used with.
The situation we have at the moment is one where someone bumps a
library version in one place, dropping support for some setup in the
name of simplicity, but because there is no universal policy, other
code to take care of that setup may remain. Code like the stuff I
removed continues to exist in a state of limbo, and it is highly
likely that when changes are made that break it, no-one will notice,
since no-one is testing on that setup anymore. The result is a far
more confusing and intricate scattering of CPPery than any of us want
to deal with.
The README still contains advice for users of GHC 6.4.1. I think it
would be wise to bin that and replace it with a more explicit
statement of exactly which targets we are programming to. Key
questions we need to answer are:
- what is the oldest version of GHC we intend to support?
- do we still support Hugs? what about other non-GHC implementations?