#661: Serious Data.HashTable bug
-----------------------------------+----------------------------------------
    Reporter:  [EMAIL PROTECTED]  |        Owner:         
        Type:  bug                 |       Status:  new    
    Priority:  high                |    Milestone:         
   Component:  libraries/base      |      Version:  6.4.1  
    Severity:  major               |     Keywords:         
          Os:  Unknown             |   Difficulty:  Unknown
Architecture:  Unknown             |  
-----------------------------------+----------------------------------------
The program below illustrates a difference between the
 description of the semantics of insert (given below)
 and the implementation. Try calling the function "test"
 with values greater than 2047. For instance:

 HT> test 2048
 0
 1024

 The documentation states:
 insert :: HashTable key val -> key -> val -> IO ()

 Inserts an key/value mapping into the hash table.

 Note that insert doesn't remove the old entry from the table
 - the behaviour is like an association list, where lookup returns
 the most-recently-inserted mapping for a key in the table.
 The reason for this is to keep insert as efficient as possible.
 If you need to update a mapping, then we provide update.

 {{{
 module HT where

 import Data.HashTable
 import qualified Data.HashTable as HT

 test :: Int -> IO ()
 test n = do ht <- new (==) hashInt
             sequence_ [ insert ht key 0 | key <- [0..n]]
             sequence_ [ insert ht key 1 | key <- [0..n]]

             let check key = do (Just val) <- HT.lookup ht key
                                if val==1 then return () else putStrLn $
 show key

             sequence_ [ check key | key <- [0..n]]
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/661>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to