X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FWord.hs;h=18300d2512c2d1a02557e706fc03cea775668159;hb=HEAD;hp=980de4d0a5a92e42fae186f8ce8c65cac80b9b16;hpb=f7a485978f04e84b086f1974b88887cc72d832d0;p=ghc-base.git diff --git a/Data/Word.hs b/Data/Word.hs index 980de4d..18300d2 100644 --- a/Data/Word.hs +++ b/Data/Word.hs @@ -1,7 +1,8 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} + ----------------------------------------------------------------------------- -- | --- Module : +-- Module : Data.Word -- Copyright : (c) The University of Glasgow 2001 -- License : BSD-style (see the file libraries/base/LICENSE) -- @@ -9,20 +10,60 @@ -- Stability : experimental -- Portability : portable -- --- 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.) - ) where + ( + -- * 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 'Prelude.negate' + should /not/ raise an error on negative arguments. + +* 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 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 'Prelude.Integer' provides unbounded + size signed integers. We do not do that yet since there is no demand + for it. + +* The rules that hold for 'Prelude.Enum' instances over a bounded type + such as 'Prelude.Int' (see the section of the Haskell report dealing + with arithmetic sequences) also hold for the 'Prelude.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. +-}