<div>The main addition of this versión is the capablity to safely handle&nbsp;transact, and serialize to permanent storage many datatypes simultaneously in the same piece of code and incrementally.&nbsp;</div><div><br></div><div>Just register each new datatype (with registerType :: &lt;Type&gt;). So it is not necessary to glue all types in advance in a single algebraic datatype. I suppose taht &quot;enhanced composablility&quot; applies to this feature.</div>
<div><br></div><div><a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/TCache" target="_blank">http://hackage.haskell.org/cgi-bin/hackage-scripts/package/TCache</a>&nbsp;<br></div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;In this release:</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Added a Data.TCache.Dynamic. &nbsp;(SEE dynamicsample.hs)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - Can handle, transact, and serialize to disk many datatypes simultaneously and incrementally</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - Dynamic uses the same interface than TCache and add *DResource(s) calls for handling many&nbsp;</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; datatypes simultaneously</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - Safe dynamic data handling trough a lighter, indexable and serializable version of Data.Dynamic</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - Added KEY object for retrieving any object of any type.</div>

<div><br></div><div><br></div><div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Data.Tcache is a transactional cache with configurable persistence. It tries to simulate Hibernate&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for Java or Rails for Ruby. The main difference is that transactions are done in memory trough STM.&nbsp;</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;There are transactional cache implementations for some J2EE servers like JBOSS.</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TCache uses STM. It can &nbsp;atomically apply a function to a list of cached objects. The resulting&nbsp;</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;objects go back to the cache (withResources). It also can retrieve these objects (getResources). &nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Persistence can be syncronous (syncCache) &nbsp;or asyncronous, wtih configurable time between cache&nbsp;</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;writes and configurable cache clearance strategy. the size of the cache can be configured too .&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;All of this can be done trough clearSyncCacheProc. Even the TVar variables can be accessed&nbsp;</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;directly (getTVar) to acceess all the semantic of atomic blocks while maintaining the persistence of the&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TVar updates.</div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Persistence can be defined for each object: Each object must have a defined key, a default filename</div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;path (if applicable). Persistence is pre-defined in files, but the readResource writeResource and&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;delResource methods can be redefined to persist in databases or whatever.</div><div><br></div>

<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;There are &nbsp;Samples in the package that explain the main features.</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div><br></div><div><br></div></div>