I don't believe that example, because substitute doesn't special case Union except in the case of unfolding. Yes there are special cases but that is the problem of the calling code, just like with type case. I hope to reduce those (with the variance stuff builtin) but I don't believe I am going to be able to make it fool proof.