I'm a little late to this discussion, but i just wanted to say that
I'm +1 on potential solution #2 (Change bracket to use
uninterruptible cleanup handler). I remember I was really surprised
the first time I studied `bracket` precisely because of this weird
interruptible cleanup behavior.
Sensible defaults matter, and `bracket` by virtue of its simpler
name is the implicitly suggested default. I'm also pretty sure that
the amount of breakage will be minimal and easy to fix (the very few
affected libraries can just use ifdefs and bracketInterruptible to
work around this) and the amount of fixage will be maximal.