我有以下Haskell代碼:無法比擬預期的類型'詮釋「與實際類型'整數」
-- Problem 69
import ProjectEuler
phi :: Integer -> Integer
phi n = n * product [p - 1 | p <- primeDivisors n] `div` product [p | p <- primeDivisors n]
-- primeDivisors n is a list of the prime divisors of n
maxRatio :: (Int, Int, Double) -> (Int, Int, Double) -> (Int, Int, Double)
maxRatio [email protected](_, _, x) [email protected](_, _, y)
| x > y = t1
| otherwise = t2
main = print (foldl
maxRatio
(0, 0, 0.0)
[(n, phi n, ratio) | n <- [2..max], let ratio = fromIntegral n/(fromIntegral (phi n))]
)
where max = 1000
它提供了以下錯誤:
Couldn't match expected type `Int' with actual type `Integer'
In the expression: n
In the expression: (n, phi n, ratio)
In the third argument of `foldl', namely
`[(n, phi n, ratio) |
n <- [2 .. max],
let ratio = fromIntegral n/(fromIntegral (phi n))]'
我懷疑的是,在三聯(0, 0, 0.0)
0的類型爲Int
。是0
總是鍵入Int
或ghci推斷類型爲Int
在這種情況下?如果以後,我該如何強制它改爲輸入Integer
?還是有其他的東西導致這個錯誤?
感謝您的明確解釋。我認爲'0'是它的類型的多態,但是我的noob眼睛看不到任何其他類型推理的原因,導致了錯誤。當然,我只是錯過了我的'maxRatio'的顯式類型聲明。 –