module Data.Array.Fast(module Data.Array.IArray, FArray(array,listArray,accumArray), famap) where import Data.Array.IArray hiding (array, listArray, accumArray) import Data.Array.Unboxed hiding (array, listArray, accumArray) import qualified Data.Array.IArray as IA import Data.Complex(Complex) import Data.Ratio(Ratio) import Data.Int(Int8, Int16, Int32, Int64) import Data.Word(Word, Word8, Word16, Word32, Word64) import Foreign(Ptr, StablePtr) class IArray a e => FArray a e | e -> a where array :: (Ix i) => (i,i) -> [(i,e)] -> a i e listArray :: (Ix i) => (i,i) -> [e] -> a i e accumArray :: (Ix i) => (e -> b -> e) -> e -> (i,i) -> [(i,b)] -> a i e array = IA.array listArray = IA.listArray accumArray = IA.accumArray instance FArray UArray Bool where -- empty instance FArray UArray Char where -- empty instance FArray UArray Double where -- empty instance FArray UArray Float where -- empty instance FArray UArray Int where -- empty instance FArray UArray Int16 where -- empty instance FArray UArray Int32 where -- empty instance FArray UArray Int64 where -- empty instance FArray UArray Int8 where -- empty instance FArray UArray Word where -- empty instance FArray UArray Word16 where -- empty instance FArray UArray Word32 where -- empty instance FArray UArray Word64 where -- empty instance FArray UArray Word8 where -- empty -- instance FArray UArray (FunPtr a) where -- empty instance FArray UArray (Ptr a) where -- empty instance FArray UArray (StablePtr a) where -- empty instance FArray Array Integer where -- empty instance FArray Array [a] where -- empty instance FArray Array (Complex a) where -- empty instance FArray Array (Ratio a) where -- empty instance FArray Array (Maybe a) where -- empty instance FArray Array (Either a b) where -- empty instance FArray Array (a -> b) where -- empty famap :: (IArray a e, FArray b f, Ix i) => (e -> f) -> a i e -> b i f famap f a = array (bounds a) [(i, f e) | (i,e) <- assocs a]