[Haskell-cafe] Efficient object identity (aka symbols as data)
jacek.generowicz at cern.ch
Thu May 26 10:45:10 CEST 2011
[ TLDR: How do you do Lisp symbols in Haskell? ]
What is the Haskell approach to efficient comparison and lookup of
objects by their identity?
Maybe a toy example would help to explain what I mean.
Imagine that I want to use Haskell to maximize happiness in a
situation where a bunch of people have to be assigned to certain
groups according to their preferences, and some constraints on the
group sizes. Conceptually my input data might be structured as follows:
data Group = Group GroupName MaxGroupSize
data Person = Person Name Group Group Group
The program should partition the people into groups, attempting to get
everyone into their most favoured groups.
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. On the
other hand, sometimes we will have to look inside the objects, for
example in order to answer queries such as "Which group did Johnny get
and how far down his list of choices did that group feature?".
I should be able to run the program on data that becomes available at
The lisper in me is crying out for (lisp-like-)symbols which I can
create from the input data at run time and on which some extra
information can be hung. How would I organize something like this in
More information about the Haskell-Cafe