
Am 22.09.16 um 15:19 schrieb Lai Boon Hui:
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
It will work like this: meanList :: (Integral a, Fractional b) => [a] -> b meanList xs = fromIntegral (sumList xs) / (lengthList xs) You probably meant -> b in the type signature, that was a typo. And you need to insert fromIntegral to convert to Fractional before you can divide. Now that I see it I am beginning to wonder why it works, though, because I was just about to insert another fromIntegral before lengthList ...
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)
Hope this helps
--
Harald Bögeholz