{-# OPTIONS -XTypeSynonymInstances #-} -- XTypeSynonymInstances added only to permit IResource instances for Strings module Main where import Data.TCache import Data.TCache.FilePersistence import Data.Typeable {------------- tests--------- example of IDynamic usage. -} --very simple data: --two objects with two different datatypes: Int and String instance Indexable Int where key x= show x instance Indexable String where key x= take 2 x main= do putStrLn "see the code to know the meaning of he results" -- NOTE registerType no longer needed let x= 1:: Int -- now *Resources primitives suppont different datatypes -- without the need of Data.Dynamic withResources [] $ const [x] withResources [] $ const ["hola"] --resources creation syncCache res <- getResource x print res res <- getResource "ho" print res -- to use heterogeneous data in the same transaction, -- use DBRef's: s <- atomically $ do let refInt = getDBRef $ keyResource x :: DBRef Int refString = getDBRef $ keyResource "ho" :: DBRef String i <- readDBRef refInt writeDBRef refString $ "hola, the retrieved value of x is " ++ show i s <- readDBRef refString return s print s -- however, retrieval of data with the incorrect type will generate an exception: syncCache