-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A Transactional data cache with configurable persistence -- -- This version correct an error in the version 0.5.3. since 0.5 nothing -- in the code has changed except that the && <4 in the -- build dependencies added in the 0.5.3 the behaviour of getClocktime to -- be lazy, that indeed makes the cache write algoritm not to work, with -- the result tha no file is written. This version force the strict -- evaluation and correct this error. Data.Tcache is a transactional -- cache with configurable persistence. It tries to simulate Hibernate -- for Java or Rails for Ruby. The main difference is that transactions -- are done in memory trough STM. There are transactional cache -- implementations for some J2EE servers like JBOSS. TCache uses STM . It -- can atomically apply a function to a list of cached objects. The -- resulting objects go back to the cache (withResources). It also can -- retrieve these objects (getResources). Persistence can be syncronous -- (syncCache) or asyncronous, wtih configurable time between cache -- writes and configurable cache clearance strategy. the size of the -- cache can be configured too . All of this can be done trough -- clearSyncCacheProc. Even the TVar variables can be accessed directly -- (getTVar) to acceess all the semantic of atomic blocks while -- maintaining the persistence of the TVar updates. Persistence can be -- defined for each object.: Each object must have a defined key, a -- default filename path (if applicable). Persistence is pre-defined in -- files, but the readResource writeResource and delResource methods can -- be redefined to persist in databases or whatever. There is a Sample.hs -- that explain the main features. @package TCache @version 0.5.4 module Data.TCache class IResource a serialize :: (IResource a) => a -> String deserialize :: (IResource a) => String -> a keyResource :: (IResource a) => a -> String defPath :: (IResource a) => a -> String readResource :: (IResource a) => a -> IO (Maybe a) writeResource :: (IResource a) => a -> IO () delResource :: (IResource a) => a -> IO () data Operation b Insert :: b -> Operation b Delete :: b -> Operation b type Cache a = IORef (Ht a, Int, Integer) getTVars :: (IResource a) => [a] -> IO [Maybe (TVar a)] withResourcesID :: (IResource a) => [a] -> ([Maybe a] -> [Operation a]) -> IO () withResources :: (IResource a) => [a] -> ([Maybe a] -> [a]) -> IO () withResource :: (IResource a) => a -> (Maybe a -> a) -> IO () getResources :: (IResource a) => [a] -> IO [Maybe a] getResource :: (IResource a) => a -> IO (Maybe a) deleteResources :: (IResource a) => [a] -> IO () deleteResource :: (IResource a) => a -> IO () refcache :: Cache a syncCache :: (IResource a) => IORef (HashTable String (Block a), t, t1) -> IO () clearSyncCacheProc :: (IResource a) => Cache a -> Int -> (Integer -> Integer -> Bool) -> Int -> IO ThreadId defaultCheck :: Integer -> Integer -> Bool readFileStrict :: FilePath -> IO [Char]