It's already a huge source of confusion for people using GHCi what they get messages about "ByteString is not ByteString."
Reading your blog post [1] it seems that we are addressing different questions:
· My proposal is only that the act of *installing* a package does not break existing installed package, and is not rejected because it risks doing so.
· You agree that the confusing behaviour you describe can’t happen with Cabal. In any one build, Cabal can ensure that only one version of each package is used in the build, so such a message could never show up.
· What you want is for the confusing behaviour to be true of GHCi too. Well that’s simple enough: ensure that the set of exposed packages (ie the ones you say ‘import M’ for), is consistent in the same way. The point is that I may need to install a bunch of packages to build a program. If I’m using Cabal, none of those newly installed packages need be exposed; I simply need them there so I can compile my program (using Cabal). But at the moment I can’t do that.
That leaves open the following question. Suppose
· I want to install and expose package P and Q
· But alas, P depends on containers 2.9 and Q depends on containers 3.1
Now I’m stuck. But there is a good reason for being stuck, and one that is explicable.