úÎ ’—     non-portable (requires STM) experimental$Peter Robinson <thaldyron@gmail.com>An instance of 7 is a (Adv)STM variable that might contain a value of  some type a. In contrast to a plain TVar, a  D has IO hooks that are executed transparently on updates and reads. ( The functions of the type class shouldn'-t be exposed directly but should be used via % the interface defined in the module TBox.Operations. See the module TFile for a concrete instantiation. /Note: Might be executed multiple times for the  same  in a single transaction. See . If  yields , the  hook will be run on the next  read.   non-portable (requires STM) experimental$Peter Robinson <thaldyron@gmail.com> Deletes the content. Writes the new content. 7If the TBox is dirty, this retries the transaction and  rereads the content using  in a separate thread. + Otherwise it simply returns the result of . 1Note: Depending on the implementation, careless  use of  and  $ in the same transaction might lead  to nonterminating retry loops. Returns  iff the  is empty.    non-portable (requires STM) experimental$Peter Robinson <thaldyron@gmail.com> KA transactional variable that writes its content to a file on each update. I The updated memory content of the TFile is not visible to other threads 0 until the file has been written successfully.  If the   is "dirty"4, the content is (re)read from the file on the next   . Constructs an initially empty   that is marked dirty.  That means, on the next  +, the contents of the provided file (if it ! exists) will be loaded into the  .     non-portable (requires STM) experimental$Peter Robinson <thaldyron@gmail.com>         tbox-0.0.0Control.Concurrent.TBox.Class"Control.Concurrent.TBox.OperationsControl.Concurrent.TFilestm-io-hooks-0.5.4Control.Concurrent.AdvSTMghc-primGHC.BoolControl.Concurrent.TBoxTBoxwriteSTMwriteIOreadSTMreadIO deleteSTMdeleteIOisDirtysetDirtydeletewritereadisEmptyTFile newEmptyIOnewIOnewControl.Monad.AdvSTM.ClassunsafeRetryWithTrue