Portability | portable |
---|---|
Stability | stable |
Maintainer | libraries@haskell.org |
Safe Haskell | Trustworthy |
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).
The Ix
class
class Ord a => Ix a whereSource
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 -> IntSource
The position of a subscript in the subrange.
inRange :: (a, a) -> a -> BoolSource
Returns True
the given subscript lies in the range defined
the bounding pair.
rangeSize :: (a, a) -> IntSource
The size of the subrange defined by a bounding pair.
Ix Bool | |
Ix Char | |
Ix Int | |
Ix Int8 | |
Ix Int16 | |
Ix Int32 | |
Ix Int64 | |
Ix Integer | |
Ix Ordering | |
Ix Word | |
Ix Word8 | |
Ix Word16 | |
Ix Word32 | |
Ix Word64 | |
Ix () | |
Ix IOMode | |
Ix SeekMode | |
Ix GeneralCategory | |
(Ord (a, b), Ix a, Ix b) => Ix (a, b) | |
(Ord (a1, a2, a3), Ix a1, Ix a2, Ix a3) => Ix (a1, a2, a3) | |
(Ord (a1, a2, a3, a4), Ix a1, Ix a2, Ix a3, Ix a4) => Ix (a1, a2, a3, a4) | |
(Ord (a1, a2, a3, a4, a5), Ix a1, Ix a2, Ix a3, Ix a4, Ix a5) => Ix (a1, a2, a3, a4, a5) |
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 Figure 1 http://www.haskell.org/onlinelibrary/ix.html#prelude-index.