Use makeStableName from System.Mem.StableName

StableName`s are just for checking pointer equality. Instead of checking for equality of the strings, check for pointer equality of their stableNames

a dirty way:
pointerEq x y= unsafePerformIO $ do
       px <- makeStableName x
       py <- makeStableName  y
       return x == y

pEq  x  y |  pointerEq x y == True = True 
              | otherwise = x == y
  


2009/12/3 David Virebayre <dav.vire+haskell@gmail.com>

On Thu, Dec 3, 2009 at 1:03 PM, Emmanuel CHANTREAU
<echant+haskell@maretmanu.org> wrote:

> In my futur program, it use a lot of binary trees with strings (words)
> as leaf. There is just arround 1000 words and they will appear a lot of
> times. The program will possibly consume a lot of process and memory
> (it is a mathematics proover).

> I began this program in C++ but haskell has a prety good speed and
> memory footprint and is easier. But I don't know if it worth to do this
> optimization: having a dictionary to translate string words in Int.

> The answer depends on the automatic optimizations in GHC, because GHC
> could compare quickely two strings if it is the same object, so it
> depends if program generated by GHC have a dictionary (tree) of strings
> internaly. Someone knows this ?

It doesn't work this way : Strings are just lists of Chars. Comparison
is made recursively, Char by Char. You can have a look at the source
to make sure :

instance (Eq a) => Eq [a] where
   []     == []     = True
   (x:xs) == (y:ys) = x == y && xs == ys
   _xs    == _ys    = False

So you will have to code your own optimisation.

David.

P.S. In French if you didn't understand:

Ca ne marche pas comme ça.
Les chaines de caractères ne sont que des listes de caractères.
La comparaison sur les listes est faite récursivement, caractère par
caractère, il suffit pour s'en assurer de regarder au source :
Donc il vaut mieux que tu implémente ton propre dictionnaire.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe