Matthias Fischmann fis at wiwi.hu-berlin.de
Sun Apr 2 04:51:20 EDT 2006

```
Ok.  I was hoping that there was a common ancestor of Integral and
Fractional.  Now I realize that I can be more precise about what I
wanted:

avg :: (FractionalOrIntegral a) => [a] -> a
avg xs = sum (map fromFractionalOrIntegral xs) / (fromIntegral (length xs))

But although it there may be a sound type system supporting this it
looks a little weird...

thanks,
matthias

On Sat, Apr 01, 2006 at 06:10:48PM -0500, Cale Gibbard wrote:
> To: Matthias Fischmann <fis at wiwi.hu-berlin.de>
> From: Cale Gibbard <cgibbard at gmail.com>
> Date: Sat, 1 Apr 2006 18:10:48 -0500
> Subject: Re: [Haskell-cafe] casting numerical types
>
> 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 <fis at wiwi.hu-berlin.de> 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-----
> >
> >
> > _______________________________________________
> >
> >
> >

--
Institute of Information Systems, Humboldt-Universitaet zu Berlin

web:      http://www.wiwi.hu-berlin.de/~fis/
e-mail:   fis at wiwi.hu-berlin.de
tel:      +49 30 2093-5742
fax:      +49 30 2093-5741
office:   Spandauer Strasse 1, R.324, 10178 Berlin, Germany
pgp:      AD67 CF64 7BB4 3B9A 6F25  0996 4D73 F1FD 8D32 9BAA
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature