X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FInt.hs;h=67b4ba8d1280ed5aa9099313f6852cee6a0e88cf;hb=748003827970cfc57cb26db256b72d16e504bb37;hp=8d8a9214ba47f38b353a195c483a9ace6bbe38b2;hpb=9fa9bc17072a58c0bae2cce4764d38677e96ac29;p=ghc-base.git diff --git a/Data/Int.hs b/Data/Int.hs index 8d8a921..67b4ba8 100644 --- a/Data/Int.hs +++ b/Data/Int.hs @@ -1,29 +1,65 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# OPTIONS_GHC -XNoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Int -- Copyright : (c) The University of Glasgow 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org -- Stability : experimental -- Portability : portable -- --- $Id: Int.hs,v 1.4 2002/04/24 16:31:39 simonmar Exp $ --- --- 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. +-}