base-4.13.0.0: Basic libraries

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

Synopsis

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

• 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

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.

#### Instances

Instances details
 # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: (Bool, Bool) -> [Bool] #index :: (Bool, Bool) -> Bool -> Int #unsafeIndex :: (Bool, Bool) -> Bool -> Int #inRange :: (Bool, Bool) -> Bool -> Bool #rangeSize :: (Bool, Bool) -> Int #unsafeRangeSize :: (Bool, Bool) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: (Char, Char) -> [Char] #index :: (Char, Char) -> Char -> Int #unsafeIndex :: (Char, Char) -> Char -> Int #inRange :: (Char, Char) -> Char -> Bool #rangeSize :: (Char, Char) -> Int #unsafeRangeSize :: (Char, Char) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: (Int, Int) -> [Int] #index :: (Int, Int) -> Int -> Int #unsafeIndex :: (Int, Int) -> Int -> Int #inRange :: (Int, Int) -> Int -> Bool #rangeSize :: (Int, Int) -> Int #unsafeRangeSize :: (Int, Int) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Int Methodsrange :: (Int8, Int8) -> [Int8] #index :: (Int8, Int8) -> Int8 -> Int #unsafeIndex :: (Int8, Int8) -> Int8 -> Int #inRange :: (Int8, Int8) -> Int8 -> Bool #rangeSize :: (Int8, Int8) -> Int #unsafeRangeSize :: (Int8, Int8) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Int Methodsrange :: (Int16, Int16) -> [Int16] #index :: (Int16, Int16) -> Int16 -> Int #unsafeIndex :: (Int16, Int16) -> Int16 -> Int #inRange :: (Int16, Int16) -> Int16 -> Bool #rangeSize :: (Int16, Int16) -> Int #unsafeRangeSize :: (Int16, Int16) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Int Methodsrange :: (Int32, Int32) -> [Int32] #index :: (Int32, Int32) -> Int32 -> Int #unsafeIndex :: (Int32, Int32) -> Int32 -> Int #inRange :: (Int32, Int32) -> Int32 -> Bool #rangeSize :: (Int32, Int32) -> Int #unsafeRangeSize :: (Int32, Int32) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Int Methodsrange :: (Int64, Int64) -> [Int64] #index :: (Int64, Int64) -> Int64 -> Int #unsafeIndex :: (Int64, Int64) -> Int64 -> Int #inRange :: (Int64, Int64) -> Int64 -> Bool #rangeSize :: (Int64, Int64) -> Int #unsafeRangeSize :: (Int64, Int64) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: (Integer, Integer) -> [Integer] #index :: (Integer, Integer) -> Integer -> Int #unsafeIndex :: (Integer, Integer) -> Integer -> Int #inRange :: (Integer, Integer) -> Integer -> Bool #rangeSize :: (Integer, Integer) -> Int #unsafeRangeSize :: (Integer, Integer) -> Int # # Since: base-4.8.0.0 Instance detailsDefined in GHC.Arr Methodsrange :: (Natural, Natural) -> [Natural] #index :: (Natural, Natural) -> Natural -> Int #unsafeIndex :: (Natural, Natural) -> Natural -> Int #inRange :: (Natural, Natural) -> Natural -> Bool #rangeSize :: (Natural, Natural) -> Int #unsafeRangeSize :: (Natural, Natural) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: (Ordering, Ordering) -> [Ordering] #index :: (Ordering, Ordering) -> Ordering -> Int #unsafeIndex :: (Ordering, Ordering) -> Ordering -> Int #inRange :: (Ordering, Ordering) -> Ordering -> Bool #rangeSize :: (Ordering, Ordering) -> Int #unsafeRangeSize :: (Ordering, Ordering) -> Int # # Since: base-4.6.0.0 Instance detailsDefined in GHC.Arr Methodsrange :: (Word, Word) -> [Word] #index :: (Word, Word) -> Word -> Int #unsafeIndex :: (Word, Word) -> Word -> Int #inRange :: (Word, Word) -> Word -> Bool #rangeSize :: (Word, Word) -> Int #unsafeRangeSize :: (Word, Word) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Word Methodsrange :: (Word8, Word8) -> [Word8] #index :: (Word8, Word8) -> Word8 -> Int #unsafeIndex :: (Word8, Word8) -> Word8 -> Int #inRange :: (Word8, Word8) -> Word8 -> Bool #rangeSize :: (Word8, Word8) -> Int #unsafeRangeSize :: (Word8, Word8) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Word Methodsrange :: (Word16, Word16) -> [Word16] #index :: (Word16, Word16) -> Word16 -> Int #unsafeIndex :: (Word16, Word16) -> Word16 -> Int #inRange :: (Word16, Word16) -> Word16 -> Bool #rangeSize :: (Word16, Word16) -> Int #unsafeRangeSize :: (Word16, Word16) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Word Methodsrange :: (Word32, Word32) -> [Word32] #index :: (Word32, Word32) -> Word32 -> Int #unsafeIndex :: (Word32, Word32) -> Word32 -> Int #inRange :: (Word32, Word32) -> Word32 -> Bool #rangeSize :: (Word32, Word32) -> Int #unsafeRangeSize :: (Word32, Word32) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Word Methodsrange :: (Word64, Word64) -> [Word64] #index :: (Word64, Word64) -> Word64 -> Int #unsafeIndex :: (Word64, Word64) -> Word64 -> Int #inRange :: (Word64, Word64) -> Word64 -> Bool #rangeSize :: (Word64, Word64) -> Int #unsafeRangeSize :: (Word64, Word64) -> Int # Ix () # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: ((), ()) -> [()] #index :: ((), ()) -> () -> Int #unsafeIndex :: ((), ()) -> () -> Int #inRange :: ((), ()) -> () -> Bool #rangeSize :: ((), ()) -> Int #unsafeRangeSize :: ((), ()) -> Int # # Since: base-2.1 Instance detailsDefined in GHC.Unicode Methods # Since: base-4.2.0.0 Instance detailsDefined in GHC.IO.IOMode Methodsrange :: (IOMode, IOMode) -> [IOMode] #index :: (IOMode, IOMode) -> IOMode -> Int #unsafeIndex :: (IOMode, IOMode) -> IOMode -> Int #inRange :: (IOMode, IOMode) -> IOMode -> Bool #rangeSize :: (IOMode, IOMode) -> Int #unsafeRangeSize :: (IOMode, IOMode) -> Int # # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methods # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methods # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methods # Since: base-4.9.0.0 Instance detailsDefined in GHC.Generics Methodsrange :: (Associativity, Associativity) -> [Associativity] # # Since: base-4.2.0.0 Instance detailsDefined in GHC.IO.Device Methodsrange :: (SeekMode, SeekMode) -> [SeekMode] #index :: (SeekMode, SeekMode) -> SeekMode -> Int #unsafeIndex :: (SeekMode, SeekMode) -> SeekMode -> Int #inRange :: (SeekMode, SeekMode) -> SeekMode -> Bool #rangeSize :: (SeekMode, SeekMode) -> Int #unsafeRangeSize :: (SeekMode, SeekMode) -> Int # # Since: base-4.8.0.0 Instance detailsDefined in Data.Void Methodsrange :: (Void, Void) -> [Void] #index :: (Void, Void) -> Void -> Int #unsafeIndex :: (Void, Void) -> Void -> Int #inRange :: (Void, Void) -> Void -> Bool #rangeSize :: (Void, Void) -> Int #unsafeRangeSize :: (Void, Void) -> Int # Ix a => Ix (Identity a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Identity Methodsrange :: (Identity a, Identity a) -> [Identity a] #index :: (Identity a, Identity a) -> Identity a -> Int #unsafeIndex :: (Identity a, Identity a) -> Identity a -> Int #inRange :: (Identity a, Identity a) -> Identity a -> Bool #rangeSize :: (Identity a, Identity a) -> Int #unsafeRangeSize :: (Identity a, Identity a) -> Int # (Ix a, Ix b) => Ix (a, b) # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: ((a, b), (a, b)) -> [(a, b)] #index :: ((a, b), (a, b)) -> (a, b) -> Int #unsafeIndex :: ((a, b), (a, b)) -> (a, b) -> Int #inRange :: ((a, b), (a, b)) -> (a, b) -> Bool #rangeSize :: ((a, b), (a, b)) -> Int #unsafeRangeSize :: ((a, b), (a, b)) -> Int # Ix (Proxy s) # Since: base-4.7.0.0 Instance detailsDefined in Data.Proxy Methodsrange :: (Proxy s, Proxy s) -> [Proxy s] #index :: (Proxy s, Proxy s) -> Proxy s -> Int #unsafeIndex :: (Proxy s, Proxy s) -> Proxy s -> Int #inRange :: (Proxy s, Proxy s) -> Proxy s -> Bool #rangeSize :: (Proxy s, Proxy s) -> Int #unsafeRangeSize :: (Proxy s, Proxy s) -> Int # (Ix a1, Ix a2, Ix a3) => Ix (a1, a2, a3) # Since: base-2.1 Instance detailsDefined in GHC.Arr Methodsrange :: ((a1, a2, a3), (a1, a2, a3)) -> [(a1, a2, a3)] #index :: ((a1, a2, a3), (a1, a2, a3)) -> (a1, a2, a3) -> Int #unsafeIndex :: ((a1, a2, a3), (a1, a2, a3)) -> (a1, a2, a3) -> Int #inRange :: ((a1, a2, a3), (a1, a2, a3)) -> (a1, a2, a3) -> Bool #rangeSize :: ((a1, a2, a3), (a1, a2, a3)) -> Int #unsafeRangeSize :: ((a1, a2, a3), (a1, a2, a3)) -> Int # Ix a => Ix (Const a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Const Methodsrange :: (Const a b, Const a b) -> [Const a b] #index :: (Const a b, Const a b) -> Const a b -> Int #unsafeIndex :: (Const a b, Const a b) -> Const a b -> Int #inRange :: (Const a b, Const a b) -> Const a b -> Bool #rangeSize :: (Const a b, Const a b) -> Int #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 detailsDefined in GHC.Arr Methodsrange :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> [(a1, a2, a3, a4)] #index :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> (a1, a2, a3, a4) -> Int #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 #rangeSize :: ((a1, a2, a3, a4), (a1, a2, a3, a4)) -> Int #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 detailsDefined in GHC.Arr Methodsrange :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> [(a1, a2, a3, a4, a5)] #index :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> (a1, a2, a3, a4, a5) -> Int #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 #rangeSize :: ((a1, a2, a3, a4, a5), (a1, a2, a3, a4, a5)) -> Int #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