I find TVar's quite easy to work with even though MVar's appear a little simpler, while TVar's a little more featureful.
So my question is pretty simple, what condition do I want to go to MVar rather than TVar? I suppose anytime I don't need transactional update I can use an MVar, but in what way does that benefit me?
TVars are safer but slower.
MVars can deadlock, but are much, much more efficient.
More efficient still is IORef
and atomicModifyIORef
(CAS), but that's highly restricted in what you can do with it.
It's really a safety over performance trade off. TVars are fully general, very safe. Everything else is less so, on a decreasing scale.