[Haskell-cafe] Array copying

Andrew Coppin andrewcoppin at btinternet.com
Sun Dec 2 06:55:44 EST 2007


Andrew Coppin wrote:
> copy :: Word32 -> IOUArray Word32 Bool -> Word32 -> IO (IOUArray 
> Word32 Bool)
> copy p grid size = do
>  let size' = size * p
>  grid' <- newArray (1,size') False
>
>  mapM_
>    (\n -> do
>      b <- readArray grid n
>      if b
>        then mapM_ (\x -> writeArray grid' (n + size*x) True) [0..p-1]
>        else return ()
>    )
>    [1..size]
>
>  return grid'

Actually, thinking about this... for most kinds of arrays (whether boxed 
or unboxed, mutable or immutable) there's probably a more efficient way 
to copy the data then this. Maybe we should add something to the various 
array APIs to allow efficient copying of arrays / large chunks of arrays?

(In the case of an unboxed array of bits, you can probably copy whole 
32-bit or 64-bit words with a few machine instructions, for example.)



More information about the Haskell-Cafe mailing list