
Somehow libraries@ never made it on to recipient list when I sent this
on Friday.
Ben Gamari
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.
Here[1] is my attempt at moving Proxy to its own module and giving it a reasonably complete set of instances (blatantly stolen from tagged). Comments welcome, particularly if you can spot any avoidable portability issues as my experience here is pretty limited. Cheers, -Ben [1] https://github.com/bgamari/packages-base/tree/proxy