in reply to @ 2016-2 21:23 UTCAlmost any IO code in there will have the ability to throw some other type of exception
I struggled with this for a long time before finally writing https://hackage.haskell.org/package/unexceptionalio
and additionally, almost any async exception can be thrown even if no synchronous exception is possible.
This is true even in pure code. Async exceptions can happen anywhere at any time for any reason, so one is never in danger of thinking "ah, well I wont get an async exception here" because you can get them anywhere