Quelle est la différence entre Int et Integer?

Dans Haskell, quelle est la différence entre un Integer et un Integer ? Où est la réponse documentée?

    “Integer” est un type de précision arbitraire: il contiendra n’importe quel nombre, peu importe sa taille, jusqu’à la limite de la mémoire de votre machine…. Cela signifie que vous n’avez jamais de débordements arithmétiques. D’autre part, cela signifie également que votre arithmétique est relativement lente. Les utilisateurs de Lisp peuvent reconnaître le type “bignum” ici.

    “Int” est le nombre entier le plus commun de 32 ou 64 bits. Les implémentations varient, bien qu’il soit garanti d’avoir au moins 30 bits.

    Source: Le Wikibook Haskell . En outre, vous pouvez trouver utile la section Numéros d’ une introduction douce à Haskell .

    Int est le type d’entiers de la machine, avec une plage garantie d’au moins -2 29 à 2 29 – 1, tandis que Integer est une précision arbitraire, avec une plage aussi grande que celle pour laquelle vous avez de la mémoire.

    https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html

    Int est Bounded , ce qui signifie que vous pouvez utiliser minBound et maxBound pour déterminer les limites, qui sont dépendantes de l’implémentation mais garanties au moins [-2 29 .. 2 29 -1].

    Par exemple:

     Prelude> (minBound, maxBound) :: (Int, Int) (-9223372036854775808,9223372036854775807) 

    Cependant, Integer est une précision arbitraire et non Bounded .

     Prelude> (minBound, maxBound) :: (Integer, Integer) :3:2: No instance for (Bounded Integer) arising from a use of `minBound' Possible fix: add an instance declaration for (Bounded Integer) In the expression: minBound In the expression: (minBound, maxBound) :: (Integer, Integer) In an equation for `it': it = (minBound, maxBound) :: (Integer, Integer) 

    Int est le C int, ce qui signifie que ses valeurs vont de -2147483647 à 2147483647, tandis qu’un Integer s’étend de l’ensemble de Z , ce qui signifie qu’il peut être arbitrairement grand.

     $ ghci Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int) (12345678901234567890,-350287150) 

    Notez la valeur du littéral Int.

    Le Prélude ne définit que les types numériques les plus élémentaires: entiers de taille fixe (Int), entiers de précision arbitraires (Entier), …

    Le type entier de précision finie Int couvre au moins la plage [- 2 ^ 29, 2 ^ 29 – 1].

    extrait du rapport Haskell: http://www.haskell.org/onlinereport/basic.html#numbers

    Un Integer est implémenté en tant Int# jusqu’à ce qu’il devienne plus grand que la valeur maximale qu’un Int# peut stocker. À ce stade, c’est un numéro GMP .