{-# LANGUAGE MultiParamTypeClasses #-} module Data.Array.Base where import Ix infixl 9 !, // class IArray a e where array :: Ix i => (i, i) -> [(i, e)] -> a i e listArray :: Ix i => (i,i) -> [e] -> a i e bounds :: Ix i => a i e -> (i,i) (!) :: Ix i => a i e -> i -> e (//) :: Ix i => a i e -> [(i, e)] -> a i e unsafeAt :: a i e -> Int -> e listArray b vs = array b (zip (range b) vs) amap f a = listArray (bounds a) [f e|e<-elems a] indices a = range (bounds a) elems a = [a!i | i <- indices a] assocs a = [(i,a!i) | i <- indices a] ixmap b f a = array b [(i, a ! f i) | i <- range b] accumArray f z b = accum f (array b [(i,z) | i <- range b]) --accum f = foldl (\a (i,v) -> a // [(i,f (a!i) v)]) accum f a ivs = a // [(i,f (a!i) v)|(i,v)<-ivs]