X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FWord.hs;h=18300d2512c2d1a02557e706fc03cea775668159;hb=HEAD;hp=7fbdc87ebba82f790fad9a9f13879d83e91f71f5;hpb=7f1f4e7a695c402ddd3a1dc2cc7114e649a78ebc;p=ghc-base.git diff --git a/Data/Word.hs b/Data/Word.hs index 7fbdc87..18300d2 100644 --- a/Data/Word.hs +++ b/Data/Word.hs @@ -1,38 +1,69 @@ -{-# 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/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org -- Stability : experimental --- Portability : non-portable +-- Portability : portable -- --- $Id: Word.hs,v 1.1 2001/06/28 14:15:02 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.) - ) where + ( + -- * Unsigned integral types + + Word, + Word8, Word16, Word32, Word64, + + -- * Notes + + -- $notes + ) where #ifdef __GLASGOW_HASKELL__ import GHC.Word #endif -import Data.Dynamic +#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. -#include "Dynamic.h" -INSTANCE_TYPEABLE0(Word8,word8Tc, "Word8" ) -INSTANCE_TYPEABLE0(Word16,word16Tc,"Word16") -INSTANCE_TYPEABLE0(Word32,word32Tc,"Word32") -INSTANCE_TYPEABLE0(Word64,word64Tc,"Word64") +* 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. +-}