Why aren't all the base package versions available? I thought this was one
of the purposes of the Cabal system...
And wouldn't it be better to remove the upper bound entirely?
`base` is special, since it's tightly linked to the compiler (the compiler hardcodes the addresses of key data types and values, such as `Bool` and specifically `True` so it can compile guards). As such, it is impossible to pick a different version of `base` for use with a given compiler version.
Removing the upper bound has the opposite problem: if `base` changes enough (say, a wholesale change from `String` to `Text`, not that that seems likely to happen in the near term) you will be claiming that your code is compatible with it.