Hi Tom,
Additional information.
MVar is low cost, fast and fairness operation. It's fantastic!
Although MVar is delicate about "order" including sync and async exceptions.
"order" means two levels.
One is single MVar's order (putMVar, takeMVar).
The other is inter-MVars order, such as the dining philosophers problem.
If you need robust systems more than performance critical systems.
It's better to use STM(TVar).
TVar is almost order free. It's amazing:-)
So here is few related illustration:)
"MVar" section
Enjoy,
Takenobu