Я новичок в Haskell, и мне любопытно, почему это вызывает ошибку.Haskell Inferred Type Error
sumtest :: (Real a) => [a] -> a
sumtest [] = 0
sumtest (x:xs) = x + sumtest xs
avgFunction :: (Integral a, Floating b) => [a] -> b
avgFunction a = sumtest a/length a
Ошибка
ERROR file:code/test1.hs:114 - Inferred type is not general enough
*** Expression : avgFunction
*** Expected type : (Integral a, Floating b) => [a] -> b
*** Inferred type : (Integral Int, Floating Int) => [Int] -> Int
----- Рабочий код ниже Per Accepted Ответ ----
sumtest :: (Num a) => [a] -> a
sumtest [] = 0
sumtest (x:xs) = x + sumtest xs
avgFunction :: (Integral a, Floating b) => [a] -> b
avgFunction a = fromIntegral (sumtest a)/fromIntegral (length a)
Сигнатура 'avgFunction' предполагает, что вы конвертируете где-то из' a' в 'b'. Где это должно произойти? На данный момент вы не конвертируете нигде, следовательно, ошибку. BTW, преобразование из общего 'Num' не _possible_. Как вы «конвертируете» комплексное число в реальное? – leftaroundabout
См. Правки. Да, я хотел бы взять целые числа и в итоге получить десятичное среднее значение. –