úÎ ¦ portable experimentalnominolo@gmail.com  A symbol. Note that the ordering on a is not preserved on Symbol a. A Symbols are ordered by their hashes, and only if the hashes are  equal will the ordering on a be used. We have:  " x == y ==> intern x == intern y  let sx = intern x  sy = intern y  in  (sx < sy) == ((symbolHash sy < symbolHash sx) || 1 symbolHash sy == symbolHash sx && x < y)   Returns the hash of the symbol. (Insert a symbol into an existing table. 5Create a new local symbol. For best performance use   together with a symbol table / map.  A . This is essentially a , but with different  performance characteristics:  O(n) creation time (using insert)  O(1) equality comparison.  O(1)* comparison (in practice). The result of  is % independent of evaluation order. (It is currently implemented as follows. 5 Each symbol contains a unique integer, which allows O(1)  comparison. B Each symbol contains an infinite chain of hashes, these are used E for comparison. In practice, it is very rare that more than the @ first of those hashes is ever evaluated. The first hash is E cached, so that most comparisons will not need any indirections.  The $ representation of the symbol. Use  to return D it. At any time, there will be only one symbol of a given name  in memory. Turn a  into a . ANote, however, that this function contains a space leak. It has E internal state (the symbol table) but is referentially transparent. @ Unfortunately, there is no way to delete items from the symbol  table. ,(This function is, of course, thread-safe.)       simple-atom-0.2 Data.Atom.UFData.Atom.SimpleSymTab lookupSymbol insertSymbolSymbol symbolHash internIntointernLink SymbolInfoSymInfo cmpSymbolsameSymsymInforepr'SymTblbaseGHC.BaseString GHC.ClassescompareGHC.ShowshowMkSymbolmkSymbolhashprimes bigprimes