| Copyright | (c) The University of Glasgow 2001 | 
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) | 
| Maintainer | [email protected] | 
| Stability | stable | 
| Portability | portable | 
| Safe Haskell | Trustworthy | 
| Language | Haskell2010 | 
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). Ix uses row-major order.
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:
inRange (l,u) i == elem i (range (l,u)) 
range (l,u) !! index (l,u) i == i, when inRange (l,u) i
map (index (l,u)) (range (l,u))) == [0..rangeSize (l,u)-1] 
rangeSize (l,u) == length (range (l,u)) 
range, (index | unsafeIndex), inRange
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.
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. 
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
    © The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
    https://downloads.haskell.org/~ghc/8.8.3/docs/html/libraries/base-4.13.0.0/Data-Ix.html