Arbitrary numerical types don't support division. (They're rings, not fields.) The (Fractional a) => [a] -> a type is the best you can do.
- Cale On 01/04/06, Matthias Fischmann <[EMAIL PROTECTED]> wrote: > > > hi all, > > this should be a quick one (for now I would be happy with a "that's > impossible", just want to make sure I don't miss anything). I want to > compute the average from a list of arbitrary numerical element type. > I wanted to do this: > > avg :: (Num a) => [a] -> a > avg xs = sum (map fromNum xs) / (fromIntegral (length xs)) > > but it doesn't compile. All I could get to work is this: > > avg :: (Fractional a) => [a] -> a > avg xs = sum xs / (fromIntegral (length xs)) > > avgI :: (Integral a) => [a] -> Float > avgI = avg . map fromIntegral > > The two function names for the same thing are tolerable, but not very > elegant. Is there another option? > > Thanks, > Matthias > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.1 (GNU/Linux) > > iD8DBQFELsI5TXPx/Y0ym6oRAuQuAKDJzqus2beMm5WKfJBupPTesm6XcQCgjohh > yKhGfl6Wv3t97ZGfBYTXKQM= > =mmOH > -----END PGP SIGNATURE----- > > > _______________________________________________ > 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
