The persistent-map package
Changes in 0.3.*:
TFiniteMaptype to make type construction more convenient.
Fixed data corruption issues with
Changes in 0.2.*:
Improved error handling. Backend lookup-exceptions are now rethrown in the AdvSTM monad.
Changes in 0.1.*:
Added the binary serialization backend.
This library provides a thread-safe (STM) frontend for finite map types together with a
backend interface for persistent storage. The TMap data type
is thread-safe, since all access functions run inside an STM monad . Any type
(see EdisonAPI) can be used as a map type.
When a TMap is modified within an STM transaction, a corresponding
backend IO-request is added using the onCommit hook (cf. stm-io-hooks
package). To ensure consistency,
the (Adv)STM monad runs these requests iff the transaction commits.
Additional backends (e.g. HDBC) can be added by instantiating the class
atomically $ do isMemb <- member 1 tmap when (not isMemb) $ insert 1 "john doe" tmap
atomically $ do v <- lookup 1 tmap -- ... do something with 'v' adjust (\_ -> "jd") 1 tmap
member will first check whether the key value
1 is in the map;
if not, it sends a lookup-request to the persistent backend
and then retries the transaction. Note that "sending a lookup-request"
essentially means adding a call to the corresponding IO-function of the backend
to the list of retry-IO actions. (This is done using the
IO hook of the stm-io-package.)
If the value does not yet exist, function
insert adds the key-value mapping to the
TMap and sends an insert-request to the backend using the
onCommit hook of the stm-io-package. Note that
onCommit guarantees that
the backend IO action is only executed iff the transaction commits. Any
changes that were made to the TMap are invisible to other threads until
the onCommit actions are run. Therefore, the threads will always observe a
Data.TStorage provides a high level interface to TMap inspired
by the TCache package ((C) Alberto Gomez Corona). It
can store any type that has a key (i.e. is an instance of type class
See file Sample.hs for an example on how to use it.
Warning: This package is very experimental and the interface will probably change.
|Versions||0.0.0, 0.1.0, 0.1.1, 0.2.2, 0.3.3, 0.3.4, 0.3.5|
|Dependencies||base (==4.*), binary (==0.5.*), containers (>=0.2.0.1 && <0.3), directory (>=126.96.36.199 && <1.1), EdisonAPI (>=1.2.1 && <1.3), EdisonCore (>=188.8.131.52 && <1.3), filepath (==1.1.*), LRU (>=0.1.1 && <0.2), mtl (>=184.108.40.206 && <1.2), stm-io-hooks (>=0.4.0 && <0.5) [details]|
|Author||Peter Robinson 2009|
|Maintainer||Peter Robinson <email@example.com>|
|Uploaded||Thu Aug 6 07:03:05 UTC 2009 by PeterRobinson|
|Downloads||1542 total (14 in the last 30 days)|
|Rating||0.0 (0 ratings) [clear rating]|
|Status||Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI
For package maintainers and hackage trustees