base-4.3.1.0: Basic libraries

Portability | portable
Stability | experimental
Maintainer | libraries@haskell.org

Data.Word

Contents

- Unsigned integral types
- Notes

Description

Unsigned integer types.

Synopsis

- data Word
- data Word8
- data Word16
- data Word32
- data Word64

# Unsigned integral types

data Word

A `Word` is an unsigned integral type, with the same size as `Int`.

Instances

Bounded Word |
Enum Word |
Eq Word |
Integral Word |
Data Word |
Num Word |
Ord Word |
Read Word |
Real Word |
Show Word |
Ix Word |
Typeable Word |
Bits Word |
Storable Word |
PrintfArg Word |

data Word8

8-bit unsigned integer type

Instances

Bounded Word8 |
Enum Word8 |
Eq Word8 |
Integral Word8 |
Data Word8 |
Num Word8 |
Ord Word8 |
Read Word8 |
Real Word8 |
Show Word8 |
Ix Word8 |
Typeable Word8 |
Bits Word8 |
Storable Word8 |
PrintfArg Word8 |

data Word16

16-bit unsigned integer type

Instances

Bounded Word16 |
Enum Word16 |
Eq Word16 |
Integral Word16 |
Data Word16 |
Num Word16 |
Ord Word16 |
Read Word16 |
Real Word16 |
Show Word16 |
Ix Word16 |
Typeable Word16 |
Bits Word16 |
Storable Word16 |
PrintfArg Word16 |

data Word32

32-bit unsigned integer type

Instances

Bounded Word32 |
Enum Word32 |
Eq Word32 |
Integral Word32 |
Data Word32 |
Num Word32 |
Ord Word32 |
Read Word32 |
Real Word32 |
Show Word32 |
Ix Word32 |
Typeable Word32 |
Bits Word32 |
Storable Word32 |
PrintfArg Word32 |

data Word64

64-bit unsigned integer type

Instances

Bounded Word64 |
Enum Word64 |
Eq Word64 |
Integral Word64 |
Data Word64 |
Num Word64 |
Ord Word64 |
Read Word64 |
Real Word64 |
Show Word64 |
Ix Word64 |
Typeable Word64 |
Bits Word64 |
Storable Word64 |
PrintfArg Word64 |

# 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.