Am Mittwoch, 11. März 2009 23:13 schrieb Manlio Perillo: > Hi. > > I have an array (Data.Array.Vector.UArr) of Word8 elements. > Elements are stored as Word8 to keep memory usage down. > > Now I need to compute the sum of all the array elements; what is the > best method? > The sum must be of type Int. > > > How efficient is to simply convert to an UArr Int, using: > > mapU fromIntegral v :: UArr Int > ? > > > What about, instead, of something like: > > genericSumU :: (UA e, Integral e) => UArr e -> Int > genericSumU = foldU add 0
That would have to be foldlU, the type of foldU is foldU :: UA a => (a -> a -> a) -> a -> UArr a -> a while foldlU :: UA a => (b -> a -> b) -> b -> UArr a -> b > where > add x y = x + fromIntegral y > ? > > > Unfortunately the latter does not compile: > > Couldn't match expected type `Int' against inferred type `e' > `e' is a rigid type variable bound by > the type signature for `genericSumU' at > bin/process-data-1.hs:64:19 > In the expression: foldU add 0 > In the definition of `genericSumU': > genericSumU = foldU add 0 > where > add x y = x + fromIntegral y > > > Moreover, this is not really a generic version. > I would like to have: > > genericSumU :: (Num i, UA e, Num e) => UArr e -> i > > is this possible? > > > > Thanks Manlio > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
