<div>The main addition of this versión is the capablity to safely handle transact, and serialize to permanent storage many datatypes simultaneously in the same piece of code and incrementally. </div><div><br></div><div>Just register each new datatype (with registerType :: <Type>). So it is not necessary to glue all types in advance in a single algebraic datatype. I suppose taht "enhanced composablility" 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> <br></div><div><br></div><div> In this release:</div>
<div> Added a Data.TCache.Dynamic. (SEE dynamicsample.hs)</div><div> - Can handle, transact, and serialize to disk many datatypes simultaneously and incrementally</div><div> - Dynamic uses the same interface than TCache and add *DResource(s) calls for handling many </div>
<div> datatypes simultaneously</div><div> - Safe dynamic data handling trough a lighter, indexable and serializable version of Data.Dynamic</div><div> - Added KEY object for retrieving any object of any type.</div>
<div><br></div><div><br></div><div><div> Data.Tcache is a transactional cache with configurable persistence. It tries to simulate Hibernate </div><div> for Java or Rails for Ruby. The main difference is that transactions are done in memory trough STM. </div>
<div> There are transactional cache implementations for some J2EE servers like JBOSS.</div><div><br></div><div> TCache uses STM. It can atomically apply a function to a list of cached objects. The resulting </div>
<div> objects go back to the cache (withResources). It also can retrieve these objects (getResources). </div><div> Persistence can be syncronous (syncCache) or asyncronous, wtih configurable time between cache </div>
<div> writes and configurable cache clearance strategy. the size of the cache can be configured too . </div><div> All of this can be done trough clearSyncCacheProc. Even the TVar variables can be accessed </div>
<div> directly (getTVar) to acceess all the semantic of atomic blocks while maintaining the persistence of the </div><div> TVar updates.</div><div><br></div><div> Persistence can be defined for each object: Each object must have a defined key, a default filename</div>
<div> path (if applicable). Persistence is pre-defined in files, but the readResource writeResource and </div><div> delResource methods can be redefined to persist in databases or whatever.</div><div><br></div>
<div> There are Samples in the package that explain the main features.</div><div> </div><div> </div><div><br></div><div><br></div></div>