Copyright | (c) The University of Glasgow 2001 |
---|---|

License | BSD-style (see the file libraries/base/LICENSE) |

Maintainer | libraries@haskell.org |

Stability | stable |

Portability | portable |

Safe Haskell | Trustworthy |

Language | Haskell2010 |

# The `Ix`

class

class Ord a => Ix a where Source

The `Ix`

class is used to map a contiguous subrange of values in
a type onto integers. It is used primarily for array indexing
(see the array package).

The first argument `(l,u)`

of each of these operations is a pair
specifying the lower and upper bounds of a contiguous subrange of values.

An implementation is entitled to assume the following laws about these operations:

The list of values in the subrange defined by a bounding pair.

index :: (a, a) -> a -> Int Source

The position of a subscript in the subrange.

inRange :: (a, a) -> a -> Bool Source

Returns `True`

the given subscript lies in the range defined
the bounding pair.

rangeSize :: (a, a) -> Int Source

The size of the subrange defined by a bounding pair.

Ix Bool Source | |

Ix Char Source | |

Ix Int Source | |

Ix Int8 Source | |

Ix Int16 Source | |

Ix Int32 Source | |

Ix Int64 Source | |

Ix Integer Source | |

Ix Ordering Source | |

Ix Word Source | |

Ix Word8 Source | |

Ix Word16 Source | |

Ix Word32 Source | |

Ix Word64 Source | |

Ix () Source | |

Ix GeneralCategory Source | |

Ix SeekMode Source | |

Ix IOMode Source | |

Ix Natural Source | |

Ix Void Source | |

(Ix a, Ix b) => Ix (a, b) Source | |

Ix (Proxy k s) Source | |

(Ix a1, Ix a2, Ix a3) => Ix (a1, a2, a3) Source | |

(Ix a1, Ix a2, Ix a3, Ix a4) => Ix (a1, a2, a3, a4) Source | |

(Ix a1, Ix a2, Ix a3, Ix a4, Ix a5) => Ix (a1, a2, a3, a4, a5) Source |

# Deriving Instances of `Ix`

Derived instance declarations for the class `Ix`

are only possible
for enumerations (i.e. datatypes having only nullary constructors)
and single-constructor datatypes, including arbitrarily large tuples,
whose constituent types are instances of `Ix`

.

- For an enumeration, the nullary constructors are assumed to be
numbered left-to-right with the indices being 0 to n-1 inclusive. This
is the same numbering defined by the
`Enum`

class. For example, given the datatype:

data Colour = Red | Orange | Yellow | Green | Blue | Indigo | Violet

we would have:

range (Yellow,Blue) == [Yellow,Green,Blue] index (Yellow,Blue) Green == 1 inRange (Yellow,Blue) Red == False

- For single-constructor datatypes, the derived instance declarations are as shown for tuples in chapter 19, section 2 of the Haskell 2010 report: https://www.haskell.org/onlinereport/haskell2010/haskellch19.html.