X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FWord.hs;h=3f2242300b4fc5a62dab40d9e38b927055565b97;hb=e86c2ab298a9bb6ec7c8beec50d60427124317c0;hp=b81a7d95953614eb26b384d597003c7e524bfe9b;hpb=bb49ec07b01f68599a49ce04473bd9616c739687;p=ghc-base.git diff --git a/Data/Word.hs b/Data/Word.hs index b81a7d9..3f22423 100644 --- a/Data/Word.hs +++ b/Data/Word.hs @@ -1,30 +1,68 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# OPTIONS_GHC -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 '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. +-}