-- type Word
------------------------------------------------------------------------
--- A Word is an unsigned integral type, with the same size as Int.
-
+-- |A 'Word' is an unsigned integral type, with the same size as 'Int'.
data Word = W# Word# deriving (Eq, Ord)
instance CCallable Word
-- and must ensure that it holds only values from its logical range.
data Word8 = W8# Word# deriving (Eq, Ord)
+-- ^ 8-bit unsigned integer type
instance CCallable Word8
instance CReturnable Word8
-- and must ensure that it holds only values from its logical range.
data Word16 = W16# Word# deriving (Eq, Ord)
+-- ^ 16-bit unsigned integer type
instance CCallable Word16
instance CReturnable Word16
#if WORD_SIZE_IN_BITS < 32
data Word32 = W32# Word32#
+-- ^ 32-bit unsigned integer type
instance Eq Word32 where
(W32# x#) == (W32# y#) = x# `eqWord32#` y#
#endif
data Word32 = W32# Word# deriving (Eq, Ord)
+-- ^ 32-bit unsigned integer type
instance Num Word32 where
(W32# x#) + (W32# y#) = W32# (narrow32Word# (x# `plusWord#` y#))
#if WORD_SIZE_IN_BITS < 64
data Word64 = W64# Word64#
+-- ^ 64-bit unsigned integer type
instance Eq Word64 where
(W64# x#) == (W64# y#) = x# `eqWord64#` y#
-- from its logical range.
data Word64 = W64# Word# deriving (Eq, Ord)
+-- ^ 64-bit unsigned integer type
instance Num Word64 where
(W64# x#) + (W64# y#) = W64# (x# `plusWord#` y#)