On 2011 May 26, at 11:12, Brandon Allbery wrote:

On Thu, May 26, 2011 at 04:45, Jacek Generowicz <jacek.generow...@cern.ch > wrote: What is the Haskell approach to efficient comparison and lookup of objects by their identity?

ghc uses Data.Unique to generate unique internal identifiers to associate with things.

At first blush it sounds like the sort of thing I'm after. Thanks.

(Think gensym. Hm, except last time I did anything serious with Lisp, it was Maclisp... does gensym even still exist, or did CL do something inscrutable with it?)

CL has gensym.

But gensym does seem to be overkill in the case I presented.

I *could*, for example, say

data Person = Fred | Johnny | Sally | Belinda | Kate | Roger | Eric [... and so on for a few squillion ...] data Group = Amazing | Brilliant | Cool | Great | Funky [ ... and so on for a few dozen ...]

preferences :: Map Person (Group, Group, Group)

In this setup (Fred == Johnny) will be very cheap, and (lookup Fred preferences) will be less cheap but possible.

I'd use gensym if I need a new symbol right about which I know nothing other than I want it to be new and unique (nobody has created it before, and nobody will in the future). In the example scenario, I know what I want the symbol is to be called, and am prepared to accept the responsibility for avoiding duplicates, but I still want to be able create it at run time. In the Haskell snippet above, the compiler protects me against duplication, but forces me to know the data at compile time.

In Lisp terms, I'm looking for make-symbol and intern.

Beyond that, the existence of functions such as reallyUnsafePointerEquality# makes me think it's a Hard Problem.

:-)


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to