base-4.2.0.2: Basic librariesContentsIndex
Data.Ix
Portabilityportable
Stabilitystable
Maintainerlibraries@haskell.org
Contents
The Ix class
Deriving Instances of Ix
Description
The Ix class is used to map a contiguous subrange of values in type onto integers. It is used primarily for array indexing (see the array package).
Synopsis
class Ord a => Ix a where
range :: (a, a) -> [a]
index :: (a, a) -> a -> Int
inRange :: (a, a) -> a -> Bool
rangeSize :: (a, a) -> Int
The Ix class
class Ord a => Ix a where

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:

Minimal complete instance: range, index and inRange.

Methods
range :: (a, a) -> [a]
The list of values in the subrange defined by a bounding pair.
index :: (a, a) -> a -> Int
The position of a subscript in the subrange.
inRange :: (a, a) -> a -> Bool
Returns True the given subscript lies in the range defined the bounding pair.
rangeSize :: (a, a) -> Int
The size of the subrange defined by a bounding pair.
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
Produced by Haddock version 2.6.1