<br><br><div class="gmail_quote">2011/4/4 Daniel Fischer <span dir="ltr"><<a href="mailto:daniel.is.fischer@googlemail.com">daniel.is.fischer@googlemail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="h5">On Monday 04 April 2011 17:15:20, Nadav Chernin wrote:<br>
> Hello,<br>
><br>
> I tried to write function mean - average of numeric list.<br>
><br>
> mean::(Fractional a)=>[a]->a<br>
> mean a = (realToFrac (sum a)) / (realToFrac (length a))<br>
><br>
> But error occures:<br>
><br>
> Could not deduce (Real a) from the context (Fractional b)<br>
> arising from a use of `realToFrac'<br>
> To correct this function, i rewrite this function:<br>
><br>
> mean::(Real a, Fractional a)=>[a]->b<br>
> mean a = (realToFrac (sum a)) / (realToFrac (length a))<br>
><br>
> Is there most simple way to write this function?<br></div></div></blockquote><div><br>For simple functions it is often revealing to define it in ghci and only then ask its type:<br><br>-- your version:<br>Prelude> let m2 as = (realToFrac $ sum as) / (realToFrac $ length as)<br>
Prelude> :t m2<br>m2 :: (Real a, Fractional b) => [a] -> b<br><br>-- Daniel's version:<br>Prelude> let m1 as = sum as / (fromIntegral $ length as)<br>Prelude> :t m1<br>m1 :: (Fractional b) => [b] -> b<br>
<br></div></div>