X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FWord.hs;h=3a0a795292eb028ad184a66f750b675c22dba628;hb=ea715b2c8255eefb3ce3dc434ee6e59f3229bde9;hp=b81a7d95953614eb26b384d597003c7e524bfe9b;hpb=bb49ec07b01f68599a49ce04473bd9616c739687;p=ghc-base.git diff --git a/Data/Word.hs b/Data/Word.hs index b81a7d9..3a0a795 100644 --- a/Data/Word.hs +++ b/Data/Word.hs @@ -1,30 +1,68 @@ {-# OPTIONS -fno-implicit-prelude #-} ----------------------------------------------------------------------------- --- --- Module : +-- | +-- Module : Data.Word -- 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: Word.hs,v 1.3 2002/03/14 12:09:49 simonmar Exp $ --- --- Sized unsigned integer types. +-- Unsigned integer types. -- ----------------------------------------------------------------------------- module Data.Word - ( Word - , Word8 - , Word16 - , Word32 - , Word64 - -- instances: Eq, Ord, Num, Bounded, Real, Integral, Ix, Enum, Read, - -- Show, Bits, CCallable, CReturnable (last two are GHC specific.) + ( + -- * Unsigned integral types + + Word, + Word8, Word16, Word32, Word64, + + -- * Notes + + -- $notes ) where #ifdef __GLASGOW_HASKELL__ import GHC.Word #endif + +#ifdef __HUGS__ +import Hugs.Word +#endif + +#ifdef __NHC__ +import NHC.FFI (Word8, Word16, Word32, Word64) +import NHC.SizedTypes (Word8, Word16, Word32, Word64) -- instances of Bits +type Word = Word32 +#endif + +{- $notes + +* All arithmetic is performed modulo 2^n, where n is the number of + bits in the type. One non-obvious consequence of this is that 'negate' + should /not/ raise an error on negative arguments. + +* For coercing between any two integer types, use + 'fromIntegral', which is specialized for all the + common cases so should be fast enough. Coercing word types to and + from integer types preserves representation, not sign. + +* It would be very natural to add a type 'Natural' providing an unbounded + size unsigned integer, just as 'Integer' provides unbounded + size signed integers. We do not do that yet since there is no demand + for it. + +* 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 'Word' types defined here. + +* Right and left shifts by amounts greater than or equal to the width + of the type result in a zero result. 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. +-}