This interface provides a collection of sized, signed integers. The types supported are as follows:
|type||number of bits|
For each type I above, we provide the following instances.
data I -- Signed Ints iToInt :: I -> Int -- not provided for Int64 intToI :: Int -> I -- not provided for Int64 instance Eq I instance Ord I instance Show I instance Read I instance Bounded I instance Num I instance Real I instance Integral I instance Enum I instance Ix I instance Bits I
Plus the coercion functions
int8ToInt16 :: Int8 -> Int16 int8ToInt32 :: Int8 -> Int32 int8ToInt64 :: Int8 -> Int64 int16ToInt8 :: Int16 -> Int8 int16ToInt32 :: Int16 -> Int32 int16ToInt64 :: Int16 -> Int64 int32ToInt8 :: Int32 -> Int8 int32ToInt16 :: Int32 -> Int16 int32ToInt64 :: Int32 -> Int64 int64ToInt8 :: Int64 -> Int8 int64ToInt16 :: Int64 -> Int16 int64ToInt32 :: Int64 -> Int32 int8ToInt :: Int8 -> Int int16ToInt :: Int16 -> Int int32ToInt :: Int32 -> Int int64ToInt :: Int64 -> Int intToInt8 :: Int -> Int8 intToInt16 :: Int -> Int16 intToInt32 :: Int -> Int32 intToInt64 :: Int -> Int64 integerToInt8 :: Integer -> Int8 integerToInt16 :: Integer -> Int16 integerToInt32 :: Integer -> Int32 integerToInt64 :: Integer -> Int64 int64ToInteger :: Int64 -> Integer int32ToInteger :: Int32 -> Integer int16ToInteger :: Int16 -> Integer int8ToInteger :: Int8 -> Integer
The rules that hold for Enum instances over a bounded type such as Int (see the section of the Haskell report dealing with arithmetic sequences) also hold for the 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.
Hugs does not provide Int64 at the moment.
The Int module also exports the overloaded operations for converting to and from Haskell Ints:
toInt :: (Integral a) => a -> Int fromInt :: (Num a) => Int -> a
Portability note: both Hugs98 and all releases of GHC prior to ghc-4.05 also exports these two via the Prelude. So, to have code that uses toInt and fromInt be maximally portable, make sure you add an import on Int (even if the version of Hugs or GHC you're currently using may not export these two from there.)