Hello all,<div><br></div><div>Can some one please suggest something on simulating some sort of &quot;object-Ids&quot; in Haskell?</div><div><br></div><div>I mean, something like the following relation will hold:</div><div>
&gt; a1 == a2  =  (<span class="Apple-style-span" style="font-weight: bold;">objectID</span> a1) == (<span class="Apple-style-span" style="font-weight: bold;">objectID</span> a2)</div><div><br></div><div>Currently I have something like</div>
<div>&gt; import Data.Hash</div><div>&gt;import qualified Data.ByteString.Char8  as B</div><div><br></div><div>&gt; newtype UniqueID = UniqueID (Hash, B.ByteString)</div><div><br></div><div>I have a type class called Identifiable, the instances of which are supposed to give a unqiue bytestring representation of the instance which can be arbitrarily long but should satisfy the condition mentioned earlier.</div>
<div><br></div><div>&gt; class  Identifiable a  where</div><div>&gt;    instanceID :: a  -&gt; B.ByteString</div><div><br></div><div><br></div><div>and finally, the required funtion objectID is defined as :</div><div>&gt; objectID :: (Hashable a, Identifiable a) =&gt; a -&gt; UniqueID</div>
<div>&gt; objectID a1 = UniqueID (hash a1, instanceID a1)</div><div><br></div><div><br></div><div>while comparing object Ids, I compare the hash values first (which can be faster for arbitrary values). Only if they are equal then I </div>
<div>compare the instanceIDs and count on laziness for avoiding the construction of the bytestrings where they are not needed.</div><div><br></div><div>Can you please suggest a better approach?</div><div> I also toyed with the idea of storing all the data &#39;objects&#39; in an array and use the index as the identifier but the trouble is I am not aware of all the number of instances before hand under all the circumstances.</div>
<div><br></div><div>Many thanks</div><div>Hemanth K</div><div><br></div><div><br></div>