Hmm. Using your experiment, I didn't see any differing behavior from my original example (both GHC 7.6.3 and 7.8.3). What should I have expected?
That being said, I hadn't tried sending SIGINT to the running process as you suggested. Thanks for this idea. Both for my example and yours, it takes two SIGINTs to kill the process. Interesting and surely not desired behavior, but I might not understand what the implications are.
I ran each program with strace and sent SIGINTs to it while running. I found it interesting that each program had paused emitting SIGVTALRMs until I sent the first SIGINT, which then it resumed without interrupting the sleep. The second SIGINT exited the process.
I'm even more curious &/ confused about the interaction of unbounded threads and signals now, or if there's any interaction at all. The pausing of the SIGVTALTRMs mentioned above makes me wonder whether it's the unbounded thread or some auxiliary mechanism that helps prevent interrupts.
I'd love to have a deeper understanding of this interworking between signals and unbounded threads. My own web scouring hasn't turned up anything, but I'd be happy to be pointed somewhere.
Kindly,
Lane