Respostas:
"Inteiro" é um tipo de precisão arbitrária: manterá qualquer número, não importa o tamanho, até o limite da memória da sua máquina…. Isso significa que você nunca tem estouros aritméticos. Por outro lado, também significa que sua aritmética é relativamente lenta. Os usuários do Lisp podem reconhecer o tipo "bignum" aqui.
"Int" é o número inteiro mais comum de 32 ou 64 bits. As implementações variam, embora seja garantido pelo menos 30 bits.
Fonte: O Wikilivro Haskell . Além disso, você pode achar útil a seção Números de Uma introdução suave a Haskell .
Int64
é implementado bastante mal em sistemas de 32 bits. Em sistemas de 64 bits, é ótimo.
Int
é Bounded
, o que significa que você pode usar minBound
e maxBound
descobrir os limites, que dependem da implementação, mas garantem manter pelo menos [-2 29 .. 2 29 -1].
Por exemplo:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
No entanto, Integer
é precisão arbitrária, e não Bounded
.
Prelude> (minBound, maxBound) :: (Integer, Integer)
<interactive>: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 é o tipo de números inteiros da máquina, com intervalo garantido de pelo menos -2 29 a 2 29 - 1, enquanto Inteiro é números inteiros de precisão arbitrária, com um intervalo tão grande quanto você tem memória.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int é C int, o que significa que seus valores variam de -2147483647 a 2147483647, enquanto um intervalo inteiro de todo o conjunto Z , ou seja, pode ser arbitrariamente grande.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Observe o valor do literal Int.
O Prelúdio define apenas os tipos numéricos mais básicos: números inteiros de tamanho fixo (Int), números inteiros de precisão arbitrária (Inteiro), ...
...
O tipo inteiro de precisão finita Int cobre pelo menos o intervalo [- 2 ^ 29, 2 ^ 29 - 1].
do relatório Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
Um Integer
é implementado como um Int#
até ficar maior que o valor máximo que um Int#
pode armazenar. Nesse ponto, é um número GMP .
Integer
e, portanto, Integer
sempre é a melhor opção?
Integer
muitas vezes é mais rápido do que é