
Int provides minimum of -2^29..2^29-1, and as far as I know the
overflow/underflow semantics is implementation dependent.
Personally, I try to use Integer, unless I'm forced to use Int.
-- Lennart
On Fri, Mar 20, 2009 at 11:17 PM, Achim Schneider
Conal Elliott
wrote: I'd always assumed that pure (non-imperative) types have specific denotational models, so that for instance the denotation of something of type Int is either bottom or a (smallish) integer.
IIRC, Ints provide signed modulo at-least-31 bits arithmetic, which is a clearly defined, but still utterly under-specified semantic. The idea is that if you want to be safe, you can just use Integer and only be bounded by the implementation's address width and swap space (I heard that Integers break at MAX_INT^MAX_INT). The other idea is that Int is a number type small enough to be as fast as possible, which, in practise, means "fits into a register, together with some tag", which excuses Int's existence where Int32 and Int64 are around.
I'm all for defaulting to Integer and providing Natural (as an potentially-unbounded alternative to Nat, which'd be one bit wider than Int)... the (usually meagre) performance gains you can get by choosing Int over Integer are worth an explicit type annotation, and with Integer, you get non-modulo semantics, by default. Is that what you want?
-- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited.
_______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://www.haskell.org/mailman/listinfo/haskell-prime