[Haskell-cafe] Efficient object identity (aka symbols as data)

Jacek Generowicz jacek.generowicz at cern.ch
Thu May 26 11:59:37 CEST 2011

On 2011 May 26, at 11:16, Christopher Done wrote:

> On 26 May 2011 10:45, Jacek Generowicz <jacek.generowicz at cern.ch>  
> wrote:
>> What is the Haskell approach to efficient comparison and lookup of  
>> objects
>> by their identity?
> Often you just provide your own and implement Eq.
>> I should be able to run the program on data that becomes available  
>> at run
>> time.
> Typically you define an id generator and zip anything coming from the
> input stream up with that generator.

Makes sense.

>> Whatever algorithm I choose to use for the optimization, will have  
>> to do
>> lots of comparisons of Groups and Persons where their *identity* is  
>> all that
>> matters: you don't need to look inside the objects.
> To achieve this abstraction the usual way is just implementing Eq:
> instance Eq Person where
>   Person{personId=id1} == Person{personId=id2} = id1 == id2

Any comments on the relative efficiency of the above as compared to

A == B in the context of

data Foo = A | B | C | D | ... lots more ...


(I imagine that a Sufficiently Smart Compiler could reduce (==) ::  
Person Person to just integer comparison.)

Thank you.

More information about the Haskell-Cafe mailing list