What I don’t expect is you could mix-and-match different versions of
base
with different releases of GHC.
Why not? Perhaps we need an example. Let’s pick something boring from base, hmmm, Bifoldable. Suppose we began our base
split by putting just Bifoldable
in base
and everything else in ghc-base
(being the library shipped with GHC).
Now, could we build this base
with different versions of GHC? I don’t see why not. It’s just a typeclass, why wouldn’t it compile with various versions? Maybe changes in GHC would make it not compile, and we solve that the way we do for any other library: ugly CPP. But it would work.
Similarly, we could change Bifoldable
(add another instance, say), release a new version of base
, and expect that to work with old GHCs too. Even GHCs from before we did the release! Radical!
Now: lots of stuff in base
is in the same position as Bifoldable
. Some stuff isn’t, for sure, and that’s why we’re going to be stuck with some kind of ghc-base
thing. But that doesn’t mean it’s somehow impossible to remove anything from base and put it in a more “normal” library.