
Ben Gamari
It seems the options before us are,
a) Use Proxy strictly internally in Data.Typeable. In this case users will continue to use the Proxy types in tagged and elsewhere as they already happily do
b) Export Proxy from Data.Typeable in its current state, accepting that users relying on external Proxy types will need to either accept a loss of functionality, explicitly hide Typeable's Proxy, or rely on orphan instances
c) Find a way to bring Typeable's Proxy type to a level of functionality comparable to that currently available outside of base
Shortly after I sent this Shachaf reminded me of the (perhaps obvious in hindsight) option (d): move the Proxy type into a new module. While I'm admittedly not very familiar with the module system, I can certainly see how moving Proxy might help avoid cycles. I can try this in the morning. It may be that (c) isn't as infeasible as I had thought. Cheers, - Ben