[project @ 1999-10-22 08:47:39 by sof]
[ghc-hetmet.git] / ghc / lib / std / Array.lhs
index 390c481..715dc73 100644 (file)
@@ -1,5 +1,5 @@
 %
-% (c) The AQUA Project, Glasgow University, 1994-1996
+% (c) The AQUA Project, Glasgow University, 1994-1999
 %
 
 \section[Array]{Module @Array@}
@@ -7,17 +7,40 @@
 \begin{code}
 {-# OPTIONS -fno-implicit-prelude #-}
 
-module  Array ( 
-    module Ix,                 -- export all of Ix 
-    Array,                     -- Array type is abstract
-
-    array, listArray, (!), bounds, indices, elems, assocs, 
-    accumArray, (//), accum, ixmap
-  ) where
+module  Array 
+
+    ( 
+      module Ix                        -- export all of Ix 
+    , Array                    -- Array type is abstract
+
+    , array        -- :: (Ix a) => (a,a) -> [(a,b)] -> Array a b
+    , listArray     -- :: (Ix a) => (a,a) -> [b] -> Array a b
+    , (!)           -- :: (Ix a) => Array a b -> a -> b
+    , bounds        -- :: (Ix a) => Array a b -> (a,a)
+    , indices       -- :: (Ix a) => Array a b -> [a]
+    , elems         -- :: (Ix a) => Array a b -> [b]
+    , assocs        -- :: (Ix a) => Array a b -> [(a,b)]
+    , accumArray    -- :: (Ix a) => (b -> c -> b) -> b -> (a,a) -> [(a,c)] -> Array a b
+    , (//)          -- :: (Ix a) => Array a b -> [(a,b)] -> Array a b
+    , accum         -- :: (Ix a) => (b -> c -> b) -> Array a b -> [(a,c)] -> Array a b
+    , ixmap         -- :: (Ix a, Ix b) => (a,a) -> (a -> b) -> Array b c -> Array a b
+
+    -- Array instances:
+    --
+    --   Ix a => Functor (Array a)
+    --   (Ix a, Eq b)  => Eq   (Array a b)
+    --   (Ix a, Ord b) => Ord  (Array a b)
+    --   (Ix a, Show a, Show b) => Show (Array a b)
+    --   (Ix a, Read a, Read b) => Read (Array a b)
+    -- 
+
+    -- Implementation checked wrt. Haskell 98 lib report, 1/99.
+
+    ) where
 
 import Ix
 import PrelList
-import PrelRead
+import PrelShow
 import PrelArr         -- Most of the hard work is done here
 import PrelBase
 
@@ -40,23 +63,23 @@ infixl 9  !, //
 {-# INLINE assocs #-}
 #endif
 
-{-# GENERATE_SPECS listArray a{~,Int,IPr} b{} #-}
+{-# SPECIALISE listArray :: (Int,Int) -> [b] -> Array Int b #-}
 listArray            :: (Ix a) => (a,a) -> [b] -> Array a b
-listArray b vs       =  array b (zipWith (\ a b -> (a,b)) (range b) vs)
+listArray b vs       =  array b (zip (range b) vs)
 
-{-# GENERATE_SPECS indices a{~,Int,IPr} b{} #-}
+{-# SPECIALISE indices :: Array Int b -> [Int] #-}
 indices                      :: (Ix a) => Array a b -> [a]
 indices                      =  range . bounds
 
-{-# GENERATE_SPECS elems a{~,Int,IPr} b{} #-}
+{-# SPECIALISE elems :: Array Int b -> [b] #-}
 elems                :: (Ix a) => Array a b -> [b]
 elems a               =  [a!i | i <- indices a]
 
-{-# GENERATE_SPECS assocs a{~,Int,IPr} b{} #-}
+{-# SPECIALISE assocs :: Array Int b -> [(Int,b)] #-}
 assocs               :: (Ix a) => Array a b -> [(a,b)]
 assocs a              =  [(i, a!i) | i <- indices a]
 
-{-# GENERATE_SPECS amap a{~,Int,IPr} b{} c{} #-}
+{-# SPECIALISE amap :: (b -> c) -> Array Int b -> Array Int c #-}
 amap                 :: (Ix a) => (b -> c) -> Array a b -> Array a c
 amap f a              =  array b [(i, f (a!i)) | i <- range b]
                          where b = bounds a
@@ -74,7 +97,7 @@ ixmap b f a           =  array b [(i, a ! f i) | i <- range b]
 
 \begin{code}
 instance Ix a => Functor (Array a) where
-  map = amap
+  fmap = amap
 
 instance  (Ix a, Eq b)  => Eq (Array a b)  where
     a == a'            =  assocs a == assocs a'
@@ -90,10 +113,12 @@ instance  (Ix a, Show a, Show b) => Show (Array a b)  where
                    shows (assocs a)                  )
     showList = showList__ (showsPrec 0)
 
+{-
 instance  (Ix a, Read a, Read b) => Read (Array a b)  where
     readsPrec p = readParen (p > 9)
           (\r -> [(array b as, u) | ("array",s) <- lex r,
                                     (b,t)       <- reads s,
                                     (as,u)      <- reads t   ])
     readList = readList__ (readsPrec 0)
+-}
 \end{code}