Transactional variables and data structures with IO hooks.
This package provides STM data structures with IO hooks. The basic building blocks are instances of class TBox
. Such an instance is an STM variable that might contain a value of some type a
. In contrast to a plain 'TVar (Maybe a)', a TBox
has IO hooks that are executed transparently on writes and reads. The IO hooks of the AdvSTM
monad extend the atomicity of STM transactions to the on-commit IO actions, which makes it particularly suitable for implementing a persistent and thread-safe storage.
See module Control.Concurrent.TFile for a (simple) instance of a TBox
that serializes its content to a file via Data.Binary
.
New in this release is the implementation of a skip list in module Control.Concurrent.TBox.TSkipList. A skip list is a probabilistic data structure that provides expected run time of O(log n) for dictionary operations (insert, lookup, filter, delete, update) similar to a balanced tree. The main advantage of a skip list is that it does not need rebalancing, which could cause lots of contention among transactions. The TFile
skip list instance tries to reconstruct its content from the TFile
-directory. See module Control.Concurrent.TFile.TSkipList for a usage example.
Feedback is highly appreciated!