The documentation forControl.Exception describes which operations may have asynchronous exceptions, even inside the masked block , saying: "the following operations ensure that they will not be interrupted"
takeMVar if MVar is definitely full, and conversely putMVar if MVar is definitely empty
In what cases is MVar"definitely" full or empty from the point of view of the compiler? Is this reasonable enough to allow me to speculate on whether my code will crash without handling async exceptions in every operation MVar?
source
share