[Haskell-beginners] Newbie question about function type constraints

Sylvain Henry sylvain at haskus.fr
Thu Sep 22 14:10:17 UTC 2016


Hi,

You can define it, but in practice there is no instance of "a" that 
satisfies both constraints: Integral a and Fractional a
 > meanList ([1,2,3] :: [Int])

<interactive>:4:1: error:
     • No instance for (Fractional Int) arising from a use of ‘meanList’

 > meanList ([1,2,3] :: [Float])

<interactive>:5:1: error:
     • No instance for (Integral Float) arising from a use of ‘meanList’

What you probably want is:
meanList :: (Integral a, Fractional b) => [a] -> b
meanList xs = fromIntegral (sumList xs) / fromIntegral (lengthList xs)

Where we convert from the integral type "a" to the fractional type "b" 
before performing the division.

 > meanList ([1,2,3] :: [Int])
2.0

Cheers
Sylvain


On 22/09/2016 15:19, Lai Boon Hui wrote:
> Hi, can someone explain to me why i cannot define meanList as:
>
> meanList :: (Integral a, Fractional b) => [a] -> a
> meanList xs = (sumList xs) / (lengthList xs)
>
> I want to restrict the function to only accept lists like [1,2,3] and 
> return answer 2.0
>
>
> sumList :: (Num a) => [a] -> a
> sumList [] = 0
> sumList (x:xs) = x + (sumList xs)
>
> lengthList :: (Num a) => [t] -> a
> lengthList [] = 0
> lengthList (_:xs) = 1 + (lengthList xs)
>
>
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20160922/1be73068/attachment.html>


More information about the Beginners mailing list