I mean like installing and managing multiple versions of the compiler toolchain is painful.
I mean, it's all pretty well automated by stack, the only painful part is that it can take a long time and use a lot of storage.
Sure it's pretty well automated, but not a great experience.
Is there something about ghcup that doesn't do the job for you? You ask it to install a particular version of GHC and Cabal for you. It does it. Multiple versions can exist together. Job done.
the default is pvp [1] and I think most packages use that and not SemVer? or, at least, I can't remember off the top of my head of specifically pinning a package with SemVer.