Haskell Hierarchical Libraries (base package)ContentsIndex
Portability portable
Stability stable
Maintainer libraries@haskell.org
Deriving Instances of Ix

Class of index types.

The Ix class is used to map a continuous subrange of values in a type onto integers. It is used primarily for array indexing (see Section 6 http://www.haskell.org/onlinelibrary/array.html#arrays). The Ix class contains the methods range, index, and inRange. The index operation maps a bounding pair, which defines the lower and upper bounds of the range, and a subscript, to an integer. The range operation enumerates all subscripts; the inRange operation tells whether a particular subscript lies in the range defined by a bounding pair.

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

        range (l,u) !! index (l,u) i == i   -- when i is in range
        inRange (l,u) i == i `elem` range (l,u)
class Ord a => Ix a where
range :: (a, a) -> [a]
index :: (a, a) -> a -> Int
inRange :: (a, a) -> a -> Bool
rangeSize :: (a, a) -> Int
class Ord a => Ix a where
range :: (a, a) -> [a]
index :: (a, a) -> a -> Int
inRange :: (a, a) -> a -> Bool
rangeSize :: (a, a) -> Int
Ix Char
Ix Int
Ix Integer
Ix Bool
Ix Ordering
Ix ()
(Ix a, Ix b) => Ix (a, b)
(Ix a1, Ix a2, Ix a3) => Ix (a1, a2, a3)
(Ix a1, Ix a2, Ix a3, Ix a4) => Ix (a1, a2, a3, a4)
(Ix a1, Ix a2, Ix a3, Ix a4, Ix a5) => Ix (a1, a2, a3, a4, a5)
Ix SeekMode
Ix IOMode
Ix Int8
Ix Int16
Ix Int32
Ix Int64
Ix Word
Ix Word8
Ix Word16
Ix Word32
Ix Word64
Ix Month
Ix Day
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 0.6