[project @ 2003-11-26 09:55:22 by simonmar]
[haskell-directory.git] / Data / HashTable.hs
index cad4faf..9fbe735 100644 (file)
@@ -52,18 +52,23 @@ import GHC.IOBase   ( IO, IOArray, newIOArray, readIOArray, writeIOArray,
                          unsafeReadIOArray, unsafeWriteIOArray,
                          IORef, newIORef, readIORef, writeIORef )
 import GHC.Err         ( undefined )
-#elif defined(__HUGS__)
+#else
 import Data.Char       ( ord )
+import Data.IORef      ( IORef, newIORef, readIORef, writeIORef )
+#  if defined(__HUGS__)
 import Hugs.IOArray    ( IOArray, newIOArray, readIOArray, writeIOArray,
                          unsafeReadIOArray, unsafeWriteIOArray )
-import Data.IORef      ( IORef, newIORef, readIORef, writeIORef )
+#  elif defined(__NHC__)
+import NHC.IOExtras    ( IOArray, newIOArray, readIOArray, writeIOArray)
+#  endif
 #endif
 import Control.Monad   ( when, mapM, sequence_ )
 
+
 -----------------------------------------------------------------------
 myReadArray  :: IOArray Int32 a -> Int32 -> IO a
 myWriteArray :: IOArray Int32 a -> Int32 -> a -> IO ()
-#ifdef DEBUG
+#if defined(DEBUG) || defined(__NHC__)
 myReadArray  = readIOArray
 myWriteArray = writeIOArray
 #else
@@ -152,7 +157,8 @@ hashString = fromIntegral . foldr f 0
   where f c m = ord c + (m * 128) `rem` fromIntegral prime
 
 -- | A prime larger than the maximum hash table size
-prime = 1500007 :: Int32
+prime :: Int32
+prime = 1500007
 
 -- -----------------------------------------------------------------------------
 -- Parameters
@@ -169,10 +175,14 @@ hLOAD = 4 :: Int32 -- Maximum average load of a single hash bucket
 -- -----------------------------------------------------------------------------
 -- Creating a new hash table
 
--- | Creates a new hash table
+-- | Creates a new hash table.  The following property should hold for the @eq@
+-- and @hash@ functions passed to 'new':
+--
+-- >   eq A B  =>  hash A == hash B
+--
 new
-  :: (key -> key -> Bool)    -- ^ An equality comparison on keys
-  -> (key -> Int32)         -- ^ A hash function on keys
+  :: (key -> key -> Bool)    -- ^ @eq@: An equality comparison on keys
+  -> (key -> Int32)         -- ^ @hash@: A hash function on keys
   -> IO (HashTable key val)  -- ^ Returns: an empty hash table
 
 new cmp hash_fn = do