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.