<span class="Apple-style-span" style="font-family: -webkit-sans-serif; font-size: 16px; ">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.</span><div>
<font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><br></span></font></div><div><font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><a href="http://hackage.haskell.org/package/IDynamic">http://hackage.haskell.org/package/IDynamic</a></span></font></div>
<div><font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><br></span></font></div><div><font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><br>
I Just uploaded it, so the documentation has not been created by Hackage. However I uincluded an example in the pachage.</span></font></div><div><font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><br>
</span></font></div><div><font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><div>{-# OPTIONS -XTypeSynonymInstances #-}</div><div>module Main where</div>
<div>import Data.IResource</div><div>import Data.IDynamic</div><div>import Data.Typeable</div><div><br></div><div>instance IResource Int where </div><div> keyResource x= "I"</div><div> serialize = show</div>
<div> deserialize = read</div><div> defPath _= "saved/"</div><div><br></div><div>instance IResource String where</div><div> keyResource x= take 5 x</div><div> serialize = show</div>
<div> deserialize = read</div><div> defPath _= "saved/"</div><div> </div><div><br></div><div>main= do</div><div> putStrLn "see the code to know the meaning of he results"</div>
<div> registerType :: IO Int -- register both datatypes (Int, and String)</div><div> registerType :: IO String</div><div><br></div><div> let x= 1 :: Int</div><div> let list= [IDynamic x, IDynamic "hello, how are you"] --typical Dynamic usage</div>
<div> let assoc= zip (map keyResource list) list</div><div><br></div><div> print $ lookup (keyResource (5 ::Int)) assoc -- lookup a IDynamic object from a container and show it</div><div> </div>
<div> mapM writeResource list</div><div> mds ← readResource $ IDynamic "hello" -- save both objects</div><div> case mds of</div><div> Nothing → error "must have been Just!" --why?</div>
<div> Just ds → do</div><div> putStrLn $ serialize ds -- serialize the dynamic object and print it</div><div> let str= fromIDyn ds :: String -- casting</div>
<div> putStrLn str -- print the string read</div><div> </div><div> let y= fromIDyn ds :: Int -- casting error</div>
<div> print y</div><div><br></div></span></font></div>