The persistent-map package [1] 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 that is an instance of
Data.Edison.Assoc.FiniteMapX (see EdisonAPI) can be used as a map
type.
If 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 class Backend.
Cheers,
Peter
[1] http://hackage.haskell.org/cgi-bin/hackage-scripts/package/persistent-map