array 0.3.0.1 → 0.3.0.2
raw patch · 2 files changed
+25/−38 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Array.IO.Internals: IOArray :: STArray RealWorld i e -> IOArray i e
- Data.Array.IO.Internals: IOUArray :: (STUArray RealWorld i e) -> IOUArray i e
- Data.Array.IO.Internals: castIOUArray :: IOUArray ix a -> IO (IOUArray ix b)
- Data.Array.IO.Internals: instance Eq (IOUArray i e)
- Data.Array.IO.Internals: instance MArray IOUArray (FunPtr a) IO
- Data.Array.IO.Internals: instance MArray IOUArray (Ptr a) IO
- Data.Array.IO.Internals: instance MArray IOUArray (StablePtr a) IO
- Data.Array.IO.Internals: instance MArray IOUArray Bool IO
- Data.Array.IO.Internals: instance MArray IOUArray Char IO
- Data.Array.IO.Internals: instance MArray IOUArray Double IO
- Data.Array.IO.Internals: instance MArray IOUArray Float IO
- Data.Array.IO.Internals: instance MArray IOUArray Int IO
- Data.Array.IO.Internals: instance MArray IOUArray Int16 IO
- Data.Array.IO.Internals: instance MArray IOUArray Int32 IO
- Data.Array.IO.Internals: instance MArray IOUArray Int64 IO
- Data.Array.IO.Internals: instance MArray IOUArray Int8 IO
- Data.Array.IO.Internals: instance MArray IOUArray Word IO
- Data.Array.IO.Internals: instance MArray IOUArray Word16 IO
- Data.Array.IO.Internals: instance MArray IOUArray Word32 IO
- Data.Array.IO.Internals: instance MArray IOUArray Word64 IO
- Data.Array.IO.Internals: instance MArray IOUArray Word8 IO
- Data.Array.IO.Internals: instance Typeable2 IOUArray
- Data.Array.IO.Internals: newtype IOArray i e :: * -> * -> *
- Data.Array.IO.Internals: newtype IOUArray i e
- Data.Array.IO.Internals: unsafeThawIOUArray :: (Ix ix) => UArray ix e -> IO (IOUArray ix e)
- Data.Array.Storable: instance (Storable e) => MArray StorableArray e IO
+ Data.Array.Storable: instance Storable e => MArray StorableArray e IO
- Data.Array: (!) :: (Ix i) => Array i e -> i -> e
+ Data.Array: (!) :: Ix i => Array i e -> i -> e
- Data.Array: (//) :: (Ix i) => Array i e -> [(i, e)] -> Array i e
+ Data.Array: (//) :: Ix i => Array i e -> [(i, e)] -> Array i e
- Data.Array: accum :: (Ix i) => (e -> a -> e) -> Array i e -> [(i, a)] -> Array i e
+ Data.Array: accum :: Ix i => (e -> a -> e) -> Array i e -> [(i, a)] -> Array i e
- Data.Array: accumArray :: (Ix i) => (e -> a -> e) -> e -> (i, i) -> [(i, a)] -> Array i e
+ Data.Array: accumArray :: Ix i => (e -> a -> e) -> e -> (i, i) -> [(i, a)] -> Array i e
- Data.Array: array :: (Ix i) => (i, i) -> [(i, e)] -> Array i e
+ Data.Array: array :: Ix i => (i, i) -> [(i, e)] -> Array i e
- Data.Array: assocs :: (Ix i) => Array i e -> [(i, e)]
+ Data.Array: assocs :: Ix i => Array i e -> [(i, e)]
- Data.Array: bounds :: (Ix i) => Array i e -> (i, i)
+ Data.Array: bounds :: Ix i => Array i e -> (i, i)
- Data.Array: data (Ix i) => Array i e :: * -> * -> *
+ Data.Array: data Ix i => Array i e :: * -> * -> *
- Data.Array: elems :: (Ix i) => Array i e -> [e]
+ Data.Array: elems :: Ix i => Array i e -> [e]
- Data.Array: indices :: (Ix i) => Array i e -> [i]
+ Data.Array: indices :: Ix i => Array i e -> [i]
- Data.Array: listArray :: (Ix i) => (i, i) -> [e] -> Array i e
+ Data.Array: listArray :: Ix i => (i, i) -> [e] -> Array i e
- Data.Array.IArray: data (Ix i) => Array i e :: * -> * -> *
+ Data.Array.IArray: data Ix i => Array i e :: * -> * -> *
- Data.Array.MArray: class (Monad m) => MArray a e m
+ Data.Array.MArray: class Monad m => MArray a e m
- Data.Array.ST: runSTArray :: (Ix i) => (forall s. ST s (STArray s i e)) -> Array i e
+ Data.Array.ST: runSTArray :: Ix i => (forall s. ST s (STArray s i e)) -> Array i e
- Data.Array.ST: runSTUArray :: (Ix i) => (forall s. ST s (STUArray s i e)) -> UArray i e
+ Data.Array.ST: runSTUArray :: Ix i => (forall s. ST s (STUArray s i e)) -> UArray i e
- Data.Array.Storable: unsafeForeignPtrToStorableArray :: (Ix i) => ForeignPtr e -> (i, i) -> IO (StorableArray i e)
+ Data.Array.Storable: unsafeForeignPtrToStorableArray :: Ix i => ForeignPtr e -> (i, i) -> IO (StorableArray i e)
Files
- Data/Array/Base.hs +24/−37
- array.cabal +1/−1
Data/Array/Base.hs view
@@ -125,20 +125,18 @@ unsafeAccumST :: (IArray a e, Ix i) => (e -> e' -> e) -> a i e -> [(Int, e')] -> ST s (STArray s i e) unsafeAccumST f arr ies = do marr <- thaw arr- sequence_ [do- old <- unsafeRead marr i- unsafeWrite marr i (f old new)- | (i, new) <- ies]+ sequence_ [do old <- unsafeRead marr i+ unsafeWrite marr i (f old new)+ | (i, new) <- ies] return marr {-# INLINE unsafeAccumArrayST #-} unsafeAccumArrayST :: Ix i => (e -> e' -> e) -> e -> (i,i) -> [(Int, e')] -> ST s (STArray s i e) unsafeAccumArrayST f e (l,u) ies = do marr <- newArray (l,u) e- sequence_ [do- old <- unsafeRead marr i- unsafeWrite marr i (f old new)- | (i, new) <- ies]+ sequence_ [do old <- unsafeRead marr i+ unsafeWrite marr i (f old new)+ | (i, new) <- ies] return marr @@ -476,10 +474,9 @@ => (e -> e' -> e) -> UArray i e -> [(Int, e')] -> ST s (UArray i e) unsafeAccumUArray f arr ies = do marr <- thawSTUArray arr- sequence_ [do- old <- unsafeRead marr i- unsafeWrite marr i (f old new)- | (i, new) <- ies]+ sequence_ [do old <- unsafeRead marr i+ unsafeWrite marr i (f old new)+ | (i, new) <- ies] unsafeFreezeSTUArray marr {-# INLINE unsafeAccumArrayUArray #-}@@ -487,10 +484,9 @@ => (e -> e' -> e) -> e -> (i,i) -> [(Int, e')] -> ST s (UArray i e) unsafeAccumArrayUArray f initialValue (l,u) ies = do marr <- newArray (l,u) initialValue- sequence_ [do- old <- unsafeRead marr i- unsafeWrite marr i (f old new)- | (i, new) <- ies]+ sequence_ [do old <- unsafeRead marr i+ unsafeWrite marr i (f old new)+ | (i, new) <- ies] unsafeFreezeSTUArray marr {-# INLINE eqUArray #-}@@ -963,11 +959,15 @@ unsafeRead :: Ix i => a i e -> Int -> m e unsafeWrite :: Ix i => a i e -> Int -> e -> m () - {- INLINE newArray #-}+ {-# INLINE newArray #-} -- The INLINE is crucial, because until we know at least which monad -- we are in, the code below allocates like crazy. So inline it, -- in the hope that the context will know the monad.- newArray = newArrayImpl+ newArray (l,u) initialValue = do+ let n = safeRangeSize (l,u)+ marr <- unsafeNewArray_ (l,u)+ sequence_ [unsafeWrite marr i initialValue | i <- [0 .. n - 1]]+ return marr {-# INLINE unsafeNewArray_ #-} unsafeNewArray_ (l,u) = newArray (l,u) arrEleBottom@@ -990,17 +990,6 @@ -- default initialisation with undefined values if we *do* know the -- initial value and it is constant for all elements. --- Workaround for performance bug #3586, GHC 6.12 only (not 6.13 and--- later, which fixed the underlying problem).-{-# INLINE newArrayImpl #-}-newArrayImpl :: (Ix i, MArray a e m) => (i, i) -> e -> m (a i e)-newArrayImpl (l,u) initialValue = do- let n = safeRangeSize (l,u)- marr <- unsafeNewArray_ (l,u)- sequence_ [unsafeWrite marr i initialValue | i <- [0 .. n - 1]]- return marr-- instance MArray IOArray e IO where #if defined(__HUGS__) getBounds = return . boundsIOArray@@ -1072,10 +1061,9 @@ (l,u) <- getBounds marr n <- getNumElements marr marr' <- newArray_ (l,u)- sequence_ [do- e <- unsafeRead marr i- unsafeWrite marr' i (f e)- | i <- [0 .. n - 1]]+ sequence_ [do e <- unsafeRead marr i+ unsafeWrite marr' i (f e)+ | i <- [0 .. n - 1]] return marr' {-# INLINE mapIndices #-}@@ -1085,10 +1073,9 @@ mapIndices (l',u') f marr = do marr' <- newArray_ (l',u') n' <- getNumElements marr'- sequence_ [do- e <- readArray marr (f i')- unsafeWrite marr' (safeIndex (l',u') n' i') e- | i' <- range (l',u')]+ sequence_ [do e <- readArray marr (f i')+ unsafeWrite marr' (safeIndex (l',u') n' i') e+ | i' <- range (l',u')] return marr' -----------------------------------------------------------------------------
array.cabal view
@@ -1,5 +1,5 @@ name: array-version: 0.3.0.1+version: 0.3.0.2 license: BSD3 license-file: LICENSE maintainer: libraries@haskell.org