Haskell:类型不匹配

时间:2011-10-18 09:04:25

标签: haskell signature

我只是试着写一个简单的函数来计算输入的平均值:

avg :: Int -> Int -> Int -> Float
avg x y z = (x+y+z)/3

当我将签名交换到

avg :: Float -> Float -> Float -> Float

它工作正常,但是上面的一个我得到以下错误信息:

无法将预期类型'Float'与实际类型'Int'匹配。

我必须使用第一个签名,它只接受Ints吗?

2 个答案:

答案 0 :(得分:9)

使用fromIntegralInt转换为Float s:

avg :: Int -> Int -> Int -> Float
avg x y z = (fromIntegral x + fromIntegral y + fromIntegral z) / 3

答案 1 :(得分:2)

更短的:

avg :: Int -> Int -> Int -> Float
avg x y z = (fromIntegral $ sum [x,y,z]) / 3.0

或者您将此概括为Int的列表:

avg :: [Int] -> Float
avg xs = (fromIntegral $ sum xs) / (fromIntegral $ length xs)