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.
Feedback is highly appreciated!
|Dependencies||array (≥0.2 & <0.4), base (4.*), binary (0.5.*), cautious-file (≥0.1.5 & <0.2), containers (≥0.2.0.1 & <0.4), directory (≥184.108.40.206 & <1.1), filepath (1.1.*), IfElse (≥0.85 & <1), monad-loops (≥0.3.0.2 & <0.4.0.0), mtl (≥220.127.116.11 & <1.2), random (≥18.104.22.168 & <1.1), safe-failure (≥0.4.0 & <0.5), stm-io-hooks (≥0.6.0 & <0.7)|
|Author||Peter Robinson 2009, 2010|
|Maintainer||Peter Robinson <email@example.com>|
|Upload date||Fri Apr 2 19:43:24 UTC 2010|
|Built on||ghc-6.12, ghc-7.0|