it seemed a big part of the problem is you really need to be able to
have multiple versions of the same package installed.
At the time, I believe the only way to do this was to include part of
the hash in the name, but that meant you had to constantly be creating
new packages which Debian didn't make easy.
Maybe it is time to explain the problem to the Debian packaging people
and see if they have any ideas from their level?
Not sure they do, because it's a GHC-specific and very nasty problem at core.
The fundamental issue is that GHC does aggressive cross-module inlining to make performance halfway reasonable -- but this means you end up requiring very precise dependencies, because different builds of the same library even with the same compiler might for some reason expose different things for inlining, and that ends up infecting the whole dependency chain. Done statically, the result is the infamous Cabal hell; done dynamically, it means shared library hell. I am not sure it can be made sane in either case.