Ne pouvais pas faire correspondre le type `Int' avec un réel de type `Integer'

J'ai le texte suivant du code 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 t1@(_, _, x) t2@(_, _, 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

qui donne l'erreur suivante:

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))]'

Je soupçonne que, dans le triple (0, 0, 0.0) les 0 sont de type Int. Est 0 toujours de type Int ou est ghci en déduire le type de Int dans ce cas? Si plus tard, comment puis-je le forcer à être de type Integer à la place? Ou est-il autre chose que la cause de cette erreur?

OriginalL'auteur Code-Apprentice | 2012-09-05