TVar package:universum
Shared memory locations that support atomic memory transactions.
Create a new 
TVar holding a value supplied
Return the current value stored in a 
TVar.
Like 'modifyTVar'', but modification is specified as a State
monad.
Write the supplied value into a 
TVar.