base-4.7.0.0: Basic libraries

Copyright | (c) The University of Glasgow 2001
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | portable
Safe Haskell | Safe
Language | Haskell2010

Data.Word

Contents

- Unsigned integral types
- byte swapping
- Notes

Description

Unsigned integer types.

Synopsis

- data Word :: *
- data Word8
- data Word16
- data Word32
- data Word64
- byteSwap16 :: Word16 -> Word16
- byteSwap32 :: Word32 -> Word32
- byteSwap64 :: Word64 -> Word64

# Unsigned integral types

data Word :: * Source

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 |
FiniteBits Word |
Bits Word |
Storable Word |
PrintfArg Word |
Typeable * 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 |
FiniteBits Word8 |
Bits Word8 |
Storable Word8 |
PrintfArg Word8 |
Typeable * 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 |
FiniteBits Word16 |
Bits Word16 |
Storable Word16 |
PrintfArg Word16 |
Typeable * 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 |
FiniteBits Word32 |
Bits Word32 |
Storable Word32 |
PrintfArg Word32 |
Typeable * 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 |
FiniteBits Word64 |
Bits Word64 |
Storable Word64 |
PrintfArg Word64 |
Typeable * Word64 |

# byte swapping

byteSwap16 :: Word16 -> Word16

Swap bytes in `Word16`.

Since: 4.7.0.0

byteSwap32 :: Word32 -> Word32

Reverse order of bytes in `Word32`.

Since: 4.7.0.0

byteSwap64 :: Word64 -> Word64

Reverse order of bytes in `Word64`.

Since: 4.7.0.0

# 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 `negate` should not raise an error on negative arguments.
- For coercing between any two integer types, use `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 `Integer` provides unbounded size signed integers. We do not do that yet since there is no demand for it.
- The rules that hold for `Enum` instances over a bounded type such as `Int` (see the section of the Haskell report dealing with arithmetic sequences) also hold for the `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.