Barring issues with changing datatypes / class instances, we can already express many of the API changes you'd want to make to some library [1].  Now, no one actually does what this proposal suggests - it's a lot of work, and it doesn't work in general.  However, the fact that Haskell makes something like this seem reasonable is heartening.

[1] http://haskellwiki.gitit.net/The%20Monad.Reader/Issue2/EternalCompatibilityInTheory


Thanks Michael, that seems to be what I was talking about, only 8 years earlier, better thought through, and somewhat more readable.

So why do you say it doesn't work in general?