X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2FArray.lhs;h=d3cee48c9b31e4c06f47dff9e9da5a0be62d6982;hb=21a542ddc3d02e0d3a8be28e0aa00796970adb9e;hp=5ff36c9748aba8346032dbdee2555a52777c28d0;hpb=e921b2e307532e0f30eefa88b11a124be592bde4;p=ghc-hetmet.git diff --git a/ghc/lib/std/Array.lhs b/ghc/lib/std/Array.lhs index 5ff36c9..d3cee48 100644 --- a/ghc/lib/std/Array.lhs +++ b/ghc/lib/std/Array.lhs @@ -1,7 +1,8 @@ +% ----------------------------------------------------------------------------- +% $Id: Array.lhs,v 1.15 2000/11/08 15:54:05 simonpj Exp $ % -% (c) The AQUA Project, Glasgow University, 1994-1999 +% (c) The University of Glasgow, 1994-2000 % - \section[Array]{Module @Array@} \begin{code} @@ -39,20 +40,33 @@ module Array ) where #ifndef __HUGS__ + ------------ GHC -------------------- import Ix import PrelList -import PrelShow import PrelArr -- Most of the hard work is done here import PrelBase + ------------ End of GHC -------------------- + + #else + ------------ HUGS -------------------- +import PrelPrim ( PrimArray + , runST + , primNewArray + , primWriteArray + , primReadArray + , primUnsafeFreezeArray + , primIndexArray + ) import Ix import List( (\\) ) -#endif infixl 9 !, // + ------------ End of HUGS -------------------- +#endif + \end{code} -#ifndef __HUGS__ %********************************************************* @@ -61,9 +75,10 @@ infixl 9 !, // %* * %********************************************************* -\begin{code} - +#ifndef __HUGS__ + ------------ GHC -------------------- +\begin{code} {-# SPECIALISE listArray :: (Int,Int) -> [b] -> Array Int b #-} listArray :: (Ix a) => (a,a) -> [b] -> Array a b listArray b vs = array b (zip (range b) vs) @@ -76,6 +91,9 @@ ixmap :: (Ix a, Ix b) => (a,a) -> (a -> b) -> Array b c -> Array a c ixmap b f a = array b [(i, a ! f i) | i <- range b] \end{code} + ------------ End of GHC -------------------- +#else + %********************************************************* %* * @@ -83,13 +101,13 @@ ixmap b f a = array b [(i, a ! f i) | i <- range b] %* * %********************************************************* + ------------ HUGS (rest of file) -------------------- -#else \begin{code} data Array ix elt = Array (ix,ix) (PrimArray elt) array :: Ix a => (a,a) -> [(a,b)] -> Array a b -array ixs@(ix_start, ix_end) ivs = primRunST (do +array ixs@(ix_start, ix_end) ivs = runST (do { mut_arr <- primNewArray (rangeSize ixs) arrEleBottom ; mapM_ (\ (i,v) -> primWriteArray mut_arr (index ixs i) v) ivs ; arr <- primUnsafeFreezeArray mut_arr @@ -118,7 +136,7 @@ assocs :: Ix a => Array a b -> [(a,b)] assocs a = [(i, a!i) | i <- indices a] (//) :: Ix a => Array a b -> [(a,b)] -> Array a b -a // us = array (bounds a) +(//) a us = array (bounds a) ([(i,a!i) | i <- indices a \\ [i | (i,_) <- us]] ++ us)