UArray

data UArray i e
array Data.Array.Unboxed
Arrays with unboxed elements. Instances of IArray are provided for UArray with certain element types (Int, Float, Char, etc.; see the UArray class for a full list). A UArray will generally be more efficient (in terms of both time and space) than the equivalent Array with the same element type. However, UArray is strict in its elements - so don't use UArray if you require the non-strictness that Array provides. Because the IArray interface provides operations overloaded on the type of the array, it should be possible to just change the array type being used by a program from say Array to UArray to get the benefits of unboxed arrays (don't forget to import Data.Array.Unboxed instead of Data.Array).
castIOUArray :: IOUArray i a -> IO (IOUArray i b)
array Data.Array.IO
Casts an IOUArray with one element type into one with a different element type. All the elements of the resulting array are undefined (unless you know what you're doing...).
castIOUArray :: IOUArray ix a -> IO (IOUArray ix b)
array Data.Array.Unsafe
Casts an IOUArray with one element type into one with a different element type. All the elements of the resulting array are undefined (unless you know what you're doing...).
castSTUArray :: STUArray s ix a -> ST s (STUArray s ix b)
array Data.Array.Unsafe, array Data.Array.ST
Casts an STUArray with one element type into one with a different element type. All the elements of the resulting array are undefined (unless you know what you're doing...).
data IOUArray i e
array Data.Array.IO, array Data.Array.IO.Safe
Mutable, unboxed, strict arrays in the IO monad. The type arguments are as follows: * i: the index type of the array (should be an instance of Ix) * e: the element type of the array. Only certain element types are supported: see Data.Array.MArray for a list of instances.
runSTUArray :: Ix i => (forall s. ST s (STUArray s i e)) -> UArray i e
array Data.Array.ST, array Data.Array.ST.Safe
A safe way to create and work with an unboxed mutable array before returning an immutable array for later perusal. This function avoids copying the array before returning it - it uses unsafeFreeze internally, but this wrapper is a safe interface to that function.
data STUArray s i e
array Data.Array.ST, array Data.Array.ST.Safe
A mutable array with unboxed elements, that can be manipulated in the ST monad. The type arguments are as follows: * s: the state variable argument for the ST type * i: the index type of the array (should be an instance of Ix) * e: the element type of the array. Only certain element types are supported. An STUArray will generally be more efficient (in terms of both time and space) than the equivalent boxed version (STArray) with the same element type. However, STUArray is strict in its elements - so don't use STUArray if you require the non-strictness that STArray provides.