
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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners