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
      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

Reply via email to