
IDynamic is variant of Data.Dynamic that can be indexed, serialized., stored, transmitted trough communications etc. So it can be used in abstract data containers, persistence, communications etc. http://hackage.haskell.org/package/IDynamic I Just uploaded it, so the documentation has not been created by Hackage. However I uincluded an example in the pachage. {-# OPTIONS -XTypeSynonymInstances #-} module Main where import Data.IResource import Data.IDynamic import Data.Typeable instance IResource Int where keyResource x= "I" serialize = show deserialize = read defPath _= "saved/" instance IResource String where keyResource x= take 5 x serialize = show deserialize = read defPath _= "saved/" main= do putStrLn "see the code to know the meaning of he results" registerType :: IO Int -- register both datatypes (Int, and String) registerType :: IO String let x= 1 :: Int let list= [IDynamic x, IDynamic "hello, how are you"] --typical Dynamic usage let assoc= zip (map keyResource list) list print $ lookup (keyResource (5 ::Int)) assoc -- lookup a IDynamic object from a container and show it mapM writeResource list mds ← readResource $ IDynamic "hello" -- save both objects case mds of Nothing → error "must have been Just!" --why? Just ds → do putStrLn $ serialize ds -- serialize the dynamic object and print it let str= fromIDyn ds :: String -- casting putStrLn str -- print the string read let y= fromIDyn ds :: Int -- casting error print y