# Data.Ix

Copyright (c) The University of Glasgow 2001 BSD-style (see the file libraries/base/LICENSE) [email protected] stable portable Trustworthy Haskell2010

#### 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). `Ix` uses row-major order.

## 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:

• `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))`

#### Minimal complete definition

range, (index | unsafeIndex), inRange

#### Methods

range :: (a, a) -> [a] Source

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.

Instances
Ix Bool

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: (Bool, Bool) -> [Bool] Source

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

unsafeIndex :: (Bool, Bool) -> Bool -> Int

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

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

unsafeRangeSize :: (Bool, Bool) -> Int

Ix Char

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: (Char, Char) -> [Char] Source

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

unsafeIndex :: (Char, Char) -> Char -> Int

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

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

unsafeRangeSize :: (Char, Char) -> Int

Ix Int

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: (Int, Int) -> [Int] Source

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

unsafeIndex :: (Int, Int) -> Int -> Int

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

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

unsafeRangeSize :: (Int, Int) -> Int

Ix Int8

Since: base-2.1

Instance details

Defined in GHC.Int

#### Methods

range :: (Int8, Int8) -> [Int8] Source

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

unsafeIndex :: (Int8, Int8) -> Int8 -> Int

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

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

unsafeRangeSize :: (Int8, Int8) -> Int

Ix Int16

Since: base-2.1

Instance details

Defined in GHC.Int

#### Methods

range :: (Int16, Int16) -> [Int16] Source

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

unsafeIndex :: (Int16, Int16) -> Int16 -> Int

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

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

unsafeRangeSize :: (Int16, Int16) -> Int

Ix Int32

Since: base-2.1

Instance details

Defined in GHC.Int

#### Methods

range :: (Int32, Int32) -> [Int32] Source

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

unsafeIndex :: (Int32, Int32) -> Int32 -> Int

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

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

unsafeRangeSize :: (Int32, Int32) -> Int

Ix Int64

Since: base-2.1

Instance details

Defined in GHC.Int

#### Methods

range :: (Int64, Int64) -> [Int64] Source

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

unsafeIndex :: (Int64, Int64) -> Int64 -> Int

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

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

unsafeRangeSize :: (Int64, Int64) -> Int

Ix Integer

Since: base-2.1

Instance details

Defined in GHC.Arr

Ix Natural

Since: base-4.8.0.0

Instance details

Defined in GHC.Arr

Ix Ordering

Since: base-2.1

Instance details

Defined in GHC.Arr

Ix Word

Since: base-4.6.0.0

Instance details

Defined in GHC.Arr

#### Methods

range :: (Word, Word) -> [Word] Source

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

unsafeIndex :: (Word, Word) -> Word -> Int

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

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

unsafeRangeSize :: (Word, Word) -> Int

Ix Word8

Since: base-2.1

Instance details

Defined in GHC.Word

#### Methods

range :: (Word8, Word8) -> [Word8] Source

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

unsafeIndex :: (Word8, Word8) -> Word8 -> Int

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

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

unsafeRangeSize :: (Word8, Word8) -> Int

Ix Word16

Since: base-2.1

Instance details

Defined in GHC.Word

#### Methods

range :: (Word16, Word16) -> [Word16] Source

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

unsafeIndex :: (Word16, Word16) -> Word16 -> Int

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

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

unsafeRangeSize :: (Word16, Word16) -> Int

Ix Word32

Since: base-2.1

Instance details

Defined in GHC.Word

#### Methods

range :: (Word32, Word32) -> [Word32] Source

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

unsafeIndex :: (Word32, Word32) -> Word32 -> Int

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

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

unsafeRangeSize :: (Word32, Word32) -> Int

Ix Word64

Since: base-2.1

Instance details

Defined in GHC.Word

#### Methods

range :: (Word64, Word64) -> [Word64] Source

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

unsafeIndex :: (Word64, Word64) -> Word64 -> Int

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

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

unsafeRangeSize :: (Word64, Word64) -> Int

Ix ()

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: ((), ()) -> [()] Source

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

unsafeIndex :: ((), ()) -> () -> Int

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

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

unsafeRangeSize :: ((), ()) -> Int

Ix GeneralCategory

Since: base-2.1

Instance details

Defined in GHC.Unicode

#### Methods

Ix IOMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.IOMode

#### Methods

range :: (IOMode, IOMode) -> [IOMode] Source

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

unsafeIndex :: (IOMode, IOMode) -> IOMode -> Int

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

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

unsafeRangeSize :: (IOMode, IOMode) -> Int

Ix DecidedStrictness

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

#### Methods

Ix SourceStrictness

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

#### Methods

Ix SourceUnpackedness

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

#### Methods

Ix Associativity

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

#### Methods

Ix SeekMode

Since: base-4.2.0.0

Instance details

Defined in GHC.IO.Device

Ix Void

Since: base-4.8.0.0

Instance details

Defined in Data.Void

#### Methods

range :: (Void, Void) -> [Void] Source

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

unsafeIndex :: (Void, Void) -> Void -> Int

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

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

unsafeRangeSize :: (Void, Void) -> Int

Ix a => Ix (Identity a)

Since: base-4.9.0.0

Instance details

Defined in Data.Functor.Identity

#### Methods

range :: (Identity a, Identity a) -> [Identity a] Source

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

unsafeIndex :: (Identity a, Identity a) -> Identity a -> Int

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

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

unsafeRangeSize :: (Identity a, Identity a) -> Int

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

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: ((a, b), (a, b)) -> [(a, b)] Source

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

unsafeIndex :: ((a, b), (a, b)) -> (a, b) -> Int

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

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

unsafeRangeSize :: ((a, b), (a, b)) -> Int

Ix (Proxy s)

Since: base-4.7.0.0

Instance details

Defined in Data.Proxy

#### Methods

range :: (Proxy s, Proxy s) -> [Proxy s] Source

index :: (Proxy s, Proxy s) -> Proxy s -> Int Source

unsafeIndex :: (Proxy s, Proxy s) -> Proxy s -> Int

inRange :: (Proxy s, Proxy s) -> Proxy s -> Bool Source

rangeSize :: (Proxy s, Proxy s) -> Int Source

unsafeRangeSize :: (Proxy s, Proxy s) -> Int

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

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: ((a1, a2, a3), (a1, a2, a3)) -> [(a1, a2, a3)] Source

index :: ((a1, a2, a3), (a1, a2, a3)) -> (a1, a2, a3) -> Int Source

unsafeIndex :: ((a1, a2, a3), (a1, a2, a3)) -> (a1, a2, a3) -> Int

inRange :: ((a1, a2, a3), (a1, a2, a3)) -> (a1, a2, a3) -> Bool Source

rangeSize :: ((a1, a2, a3), (a1, a2, a3)) -> Int Source

unsafeRangeSize :: ((a1, a2, a3), (a1, a2, a3)) -> Int

Ix a => Ix (Const a b)

Since: base-4.9.0.0

Instance details

Defined in Data.Functor.Const

#### Methods

range :: (Const a b, Const a b) -> [Const a b] Source

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

unsafeIndex :: (Const a b, Const a b) -> Const a b -> Int

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

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

unsafeRangeSize :: (Const a b, Const a b) -> Int

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

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> [(a1, a2, a3, a4)] Source

index :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> (a1, a2, a3, a4) -> Int Source

unsafeIndex :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> (a1, a2, a3, a4) -> Int

inRange :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> (a1, a2, a3, a4) -> Bool Source

rangeSize :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> Int Source

unsafeRangeSize :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> Int

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

Since: base-2.1

Instance details

Defined in GHC.Arr

#### Methods

range :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> [(a1, a2, a3, a4, a5)] Source

index :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> (a1, a2, a3, a4, a5) -> Int Source

unsafeIndex :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> (a1, a2, a3, a4, a5) -> Int

inRange :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> (a1, a2, a3, a4, a5) -> Bool Source

rangeSize :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> Int Source

unsafeRangeSize :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> Int

## 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```

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).