[replace old list based array implementation with constant time version
John Meacham <john@repetae.net>**20061116071525] hunk ./lib/base/Data/Array.hs 1
+{-# OPTIONS_JHC -funboxed-tuples #-}
hunk ./lib/base/Data/Array.hs 4
-    Array, array, listArray, (!), bounds, indices, elems, assocs,
-    accumArray, (//), accum, ixmap ) where
+    Array(),
+    array,
+    listArray,
+    (!),
+    bounds,
+    indices,
+    elems,
+    assocs,
+    accumArray,
+    (//),
+    accum,
+    ixmap
+    ) where
hunk ./lib/base/Data/Array.hs 19
-import Data.List( (\\) )
---import Prelude.Text
+import Jhc.Array
+import Jhc.Int
hunk ./lib/base/Data/Array.hs 24
-data (Ix a) => Array a b = MkArray (a,a) (a -> b) deriving ()
+
+data Array a b = MkArray !a !a (Array__ b)
hunk ./lib/base/Data/Array.hs 28
-array b ivs =
-    if and [inRange b i | (i,_) <- ivs]
-        then MkArray b
-                     (\j -> case [v | (i,v) <- ivs, i == j] of
-                            [v]   -> v
-                            []    -> error "Array.!: \
-                                           \undefined array element"
-                            _     -> error "Array.!: \
-                                           \multiply defined array element")
-        else error "Array.array: out-of-range array association"
+array b@(s,e) ivs = case newArray (error "array: missing element") (rangeSize b) [(index b x,y) | (x,y) <- ivs] of
+        arr -> MkArray s e arr
hunk ./lib/base/Data/Array.hs 35
-(!) (MkArray _ f)     =  f
+(!) (MkArray s e arr) i =  case unboxInt (index (s,e) i) of i' -> case indexArray__ arr i' of (# r #) -> r
hunk ./lib/base/Data/Array.hs 38
-bounds (MkArray b _)  =  b
+bounds (MkArray s e _)  =  (s,e)
hunk ./lib/base/Data/Array.hs 50
+a // []               = a
hunk ./lib/base/Data/Array.hs 57
-accum                 :: (Ix a) => (b -> c -> b) -> Array a b -> [(a,c)]
-                                   -> Array a b
+accum                 :: (Ix a) => (b -> c -> b) -> Array a b -> [(a,c)] -> Array a b
hunk ./lib/base/Data/Array.hs 60
-accumArray            :: (Ix a) => (b -> c -> b) -> b -> (a,a) -> [(a,c)]
-                                   -> Array a b
+accumArray            :: (Ix a) => (b -> c -> b) -> b -> (a,a) -> [(a,c)] -> Array a b
hunk ./lib/base/Data/Array.hs 63
-ixmap                 :: (Ix a, Ix b) => (a,a) -> (a -> b) -> Array b c
-                                         -> Array a c
+ixmap                 :: (Ix a, Ix b) => (a,a) -> (a -> b) -> Array b c -> Array a c
hunk ./lib/base/Data/Array.hs 67
-    fmap fn (MkArray b f) =  MkArray b (fn . f)
+    fmap fn a = array (bounds a) [ (a,fn b) | (a,b) <- assocs a ]
hunk ./lib/base/Data/Array.hs 80
-
hunk ./lib/base/Data/Array.hs 91
+