add Data.Sequence to nhc98 build
[haskell-directory.git] / Data / HashTable.hs
index fda647e..8ea7909 100644 (file)
@@ -62,7 +62,7 @@ import Data.Int               ( Int64 )
 import Hugs.IOArray    ( IOArray, newIOArray,
                          unsafeReadIOArray, unsafeWriteIOArray )
 #  elif defined(__NHC__)
-import NHC.IOExtras    ( IOArray, newIOArray )
+import NHC.IOExtras    ( IOArray, newIOArray, readIOArray, writeIOArray )
 #  endif
 #endif
 import Control.Monad   ( mapM, mapM_, sequence_ )
@@ -83,9 +83,9 @@ newMutArray   :: (Int32, Int32) -> a -> IO (MutArray a)
 #if defined(DEBUG) || defined(__NHC__)
 type MutArray a = IOArray Int32 a
 type HTArray a = MutArray a
-newMutArray = newArray
-readHTArray  = readArray
-writeMutArray = writeArray
+newMutArray = newIOArray
+readHTArray  = readIOArray
+writeMutArray = writeIOArray
 freezeArray = return
 thawArray = return
 #else
@@ -192,6 +192,7 @@ golden = -1640531527
 -- implemented by extracting the uppermost 32 bits of the 64-bit
 -- result of multiplying by a 32-bit constant.  The constant is from
 -- Knuth, derived from the golden ratio:
+--
 -- > golden = round ((sqrt 5 - 1) * 2^31) :: Int
 hashInt :: Int -> Int32
 hashInt x = mulHi (fromIntegral x) golden
@@ -359,20 +360,20 @@ expandHashTable hash table@HT{ buckets=bkts, bmask=mask } = do
       then return table
       else do
    --
-   newbkts' <- newMutArray (0,newmask) []
+    newbkts' <- newMutArray (0,newmask) []
 
-   let
-    splitBucket oldindex = do
-      bucket <- readHTArray bkts oldindex
-      let (oldb,newb) =
+    let
+     splitBucket oldindex = do
+       bucket <- readHTArray bkts oldindex
+       let (oldb,newb) =
               partition ((oldindex==). bucketIndex newmask . hash . fst) bucket
-      writeMutArray newbkts' oldindex oldb
-      writeMutArray newbkts' (oldindex + oldsize) newb
-   mapM_ splitBucket [0..mask]
+       writeMutArray newbkts' oldindex oldb
+       writeMutArray newbkts' (oldindex + oldsize) newb
+    mapM_ splitBucket [0..mask]
 
-   newbkts <- freezeArray newbkts'
+    newbkts <- freezeArray newbkts'
 
-   return ( table{ buckets=newbkts, bmask=newmask } )
+    return ( table{ buckets=newbkts, bmask=newmask } )
 
 -- -----------------------------------------------------------------------------
 -- Deleting a mapping from the hash table