X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FInt.hs;h=c9c9036d53b49ac3ee5d0d1ad7e64b8b1845d3f2;hb=HEAD;hp=182152c1e5b6b9bc83a4a8b56dba7e1b76b3ed8f;hpb=f7a485978f04e84b086f1974b88887cc72d832d0;p=ghc-base.git diff --git a/Data/Int.hs b/Data/Int.hs index 182152c..c9c9036 100644 --- a/Data/Int.hs +++ b/Data/Int.hs @@ -1,4 +1,5 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} + ----------------------------------------------------------------------------- -- | -- Module : Data.Int @@ -9,19 +10,57 @@ -- Stability : experimental -- Portability : portable -- --- Sized Integer types. +-- Signed integer types -- ----------------------------------------------------------------------------- module Data.Int - ( Int8 - , Int16 - , Int32 - , Int64 - -- instances: Eq, Ord, Num, Bounded, Real, Integral, Ix, Enum, Read, - -- Show, Bits, CCallable, CReturnable (last two are GHC specific.) - ) where + ( + -- * Signed integer types + Int, + Int8, Int16, Int32, Int64, + + -- * Notes + + -- $notes + ) where #ifdef __GLASGOW_HASKELL__ -import GHC.Int +import GHC.Base ( Int ) +import GHC.Int ( Int8, Int16, Int32, Int64 ) +#endif + +#ifdef __HUGS__ +import Hugs.Int ( Int8, Int16, Int32, Int64 ) +#endif + +#ifdef __NHC__ +import Prelude +import Prelude (Int) +import NHC.FFI (Int8, Int16, Int32, Int64) +import NHC.SizedTypes (Int8, Int16, Int32, Int64) -- instances of Bits #endif + +{- $notes + +* All arithmetic is performed modulo 2^n, where @n@ is the number of + bits in the type. + +* For coercing between any two integer types, use 'Prelude.fromIntegral', + which is specialized for all the common cases so should be fast + enough. Coercing word types (see "Data.Word") to and from integer + types preserves representation, not sign. + +* The rules that hold for 'Prelude.Enum' instances over a + bounded type such as 'Int' (see the section of the + Haskell report dealing with arithmetic sequences) also hold for the + 'Prelude.Enum' instances over the various + 'Int' types defined here. + +* Right and left shifts by amounts greater than or equal to the width + of the type result in either zero or -1, depending on the sign of + the value being shifted. This is contrary to the behaviour in C, + which is undefined; a common interpretation is to truncate the shift + count to the width of the type, for example @1 \<\< 32 + == 1@ in some C implementations. +-}