The tbox package

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.