
Edward Kmett
It is actually quite fundamental.
Instance resolution works on pattern matching on the type and we need all instances to be "global" and not able to be hidden or locally overridden to avoid coherence problems.
There have been attempts to relax this restriction in the past, none of which are particularly satisfactory.
* http://dspace.library.uu.nl/handle/1874/294072 is probably the most recent, but some are quite old.
Thank you for the education!
But basically all of them have run afoul of other ways to get "stuck" when resolving instances, or needing a vocabulary to track provenance of instances, or violate the open world assumptions.
To my undeducated guess, the paper appears to do a decent job on covering the alternatives. One thing changed since that paper -- type families gained injectivity, the lack of which was listed as the issue with the associated type families approach. Barring the (huge) question of it changing the kind of Functor, are there any other problems with it? -- с уважениeм / respectfully, Косырев Сергей