add GHC.HetMet.{hetmet_kappa,hetmet_kappa_app}
[ghc-base.git] / Data / Int.hs
index 553704a..c9c9036 100644 (file)
@@ -1,27 +1,66 @@
-{-# OPTIONS -fno-implicit-prelude #-}
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+
 -----------------------------------------------------------------------------
 -- |
 -- 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
 --
--- 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.
+-}