base-4.9.1.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

• class Ord a => Ix a where

# 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

range, (index | unsafeIndex), inRange

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

 # Methodsrange :: (Bool, Bool) -> [Bool] #index :: (Bool, Bool) -> Bool -> Int #unsafeIndex :: (Bool, Bool) -> Bool -> IntinRange :: (Bool, Bool) -> Bool -> Bool #rangeSize :: (Bool, Bool) -> Int #unsafeRangeSize :: (Bool, Bool) -> Int # Methodsrange :: (Char, Char) -> [Char] #index :: (Char, Char) -> Char -> Int #unsafeIndex :: (Char, Char) -> Char -> IntinRange :: (Char, Char) -> Char -> Bool #rangeSize :: (Char, Char) -> Int #unsafeRangeSize :: (Char, Char) -> Int # Methodsrange :: (Int, Int) -> [Int] #index :: (Int, Int) -> Int -> Int #unsafeIndex :: (Int, Int) -> Int -> IntinRange :: (Int, Int) -> Int -> Bool #rangeSize :: (Int, Int) -> Int #unsafeRangeSize :: (Int, Int) -> Int # Methodsrange :: (Int8, Int8) -> [Int8] #index :: (Int8, Int8) -> Int8 -> Int #unsafeIndex :: (Int8, Int8) -> Int8 -> IntinRange :: (Int8, Int8) -> Int8 -> Bool #rangeSize :: (Int8, Int8) -> Int #unsafeRangeSize :: (Int8, Int8) -> Int # Methodsrange :: (Int16, Int16) -> [Int16] #index :: (Int16, Int16) -> Int16 -> Int #unsafeIndex :: (Int16, Int16) -> Int16 -> IntinRange :: (Int16, Int16) -> Int16 -> Bool #rangeSize :: (Int16, Int16) -> Int #unsafeRangeSize :: (Int16, Int16) -> Int # Methodsrange :: (Int32, Int32) -> [Int32] #index :: (Int32, Int32) -> Int32 -> Int #unsafeIndex :: (Int32, Int32) -> Int32 -> IntinRange :: (Int32, Int32) -> Int32 -> Bool #rangeSize :: (Int32, Int32) -> Int #unsafeRangeSize :: (Int32, Int32) -> Int # Methodsrange :: (Int64, Int64) -> [Int64] #index :: (Int64, Int64) -> Int64 -> Int #unsafeIndex :: (Int64, Int64) -> Int64 -> IntinRange :: (Int64, Int64) -> Int64 -> Bool #rangeSize :: (Int64, Int64) -> Int #unsafeRangeSize :: (Int64, Int64) -> Int # Methodsrange :: (Integer, Integer) -> [Integer] #index :: (Integer, Integer) -> Integer -> Int #unsafeIndex :: (Integer, Integer) -> Integer -> IntinRange :: (Integer, Integer) -> Integer -> Bool #rangeSize :: (Integer, Integer) -> Int #unsafeRangeSize :: (Integer, Integer) -> Int # Methodsrange :: (Ordering, Ordering) -> [Ordering] #index :: (Ordering, Ordering) -> Ordering -> Int #unsafeIndex :: (Ordering, Ordering) -> Ordering -> IntinRange :: (Ordering, Ordering) -> Ordering -> Bool #rangeSize :: (Ordering, Ordering) -> Int #unsafeRangeSize :: (Ordering, Ordering) -> Int # Methodsrange :: (Word, Word) -> [Word] #index :: (Word, Word) -> Word -> Int #unsafeIndex :: (Word, Word) -> Word -> IntinRange :: (Word, Word) -> Word -> Bool #rangeSize :: (Word, Word) -> Int #unsafeRangeSize :: (Word, Word) -> Int # Methodsrange :: (Word8, Word8) -> [Word8] #index :: (Word8, Word8) -> Word8 -> Int #unsafeIndex :: (Word8, Word8) -> Word8 -> IntinRange :: (Word8, Word8) -> Word8 -> Bool #rangeSize :: (Word8, Word8) -> Int #unsafeRangeSize :: (Word8, Word8) -> Int # Methodsrange :: (Word16, Word16) -> [Word16] #index :: (Word16, Word16) -> Word16 -> Int #unsafeIndex :: (Word16, Word16) -> Word16 -> IntinRange :: (Word16, Word16) -> Word16 -> Bool #rangeSize :: (Word16, Word16) -> Int #unsafeRangeSize :: (Word16, Word16) -> Int # Methodsrange :: (Word32, Word32) -> [Word32] #index :: (Word32, Word32) -> Word32 -> Int #unsafeIndex :: (Word32, Word32) -> Word32 -> IntinRange :: (Word32, Word32) -> Word32 -> Bool #rangeSize :: (Word32, Word32) -> Int #unsafeRangeSize :: (Word32, Word32) -> Int # Methodsrange :: (Word64, Word64) -> [Word64] #index :: (Word64, Word64) -> Word64 -> Int #unsafeIndex :: (Word64, Word64) -> Word64 -> IntinRange :: (Word64, Word64) -> Word64 -> Bool #rangeSize :: (Word64, Word64) -> Int #unsafeRangeSize :: (Word64, Word64) -> Int Ix () # Methodsrange :: ((), ()) -> [()] #index :: ((), ()) -> () -> Int #unsafeIndex :: ((), ()) -> () -> IntinRange :: ((), ()) -> () -> Bool #rangeSize :: ((), ()) -> Int #unsafeRangeSize :: ((), ()) -> Int # Methods # Methodsrange :: (IOMode, IOMode) -> [IOMode] #index :: (IOMode, IOMode) -> IOMode -> Int #unsafeIndex :: (IOMode, IOMode) -> IOMode -> IntinRange :: (IOMode, IOMode) -> IOMode -> Bool #rangeSize :: (IOMode, IOMode) -> Int #unsafeRangeSize :: (IOMode, IOMode) -> Int # Methods # Methods # Methods # Methodsrange :: (Associativity, Associativity) -> [Associativity] # # Methodsrange :: (SeekMode, SeekMode) -> [SeekMode] #index :: (SeekMode, SeekMode) -> SeekMode -> Int #unsafeIndex :: (SeekMode, SeekMode) -> SeekMode -> IntinRange :: (SeekMode, SeekMode) -> SeekMode -> Bool #rangeSize :: (SeekMode, SeekMode) -> Int #unsafeRangeSize :: (SeekMode, SeekMode) -> Int # Methodsrange :: (Void, Void) -> [Void] #index :: (Void, Void) -> Void -> Int #unsafeIndex :: (Void, Void) -> Void -> IntinRange :: (Void, Void) -> Void -> Bool #rangeSize :: (Void, Void) -> Int #unsafeRangeSize :: (Void, Void) -> Int # Methodsrange :: (Natural, Natural) -> [Natural] #index :: (Natural, Natural) -> Natural -> Int #unsafeIndex :: (Natural, Natural) -> Natural -> IntinRange :: (Natural, Natural) -> Natural -> Bool #rangeSize :: (Natural, Natural) -> Int #unsafeRangeSize :: (Natural, Natural) -> Int Ix a => Ix (Identity a) # Methodsrange :: (Identity a, Identity a) -> [Identity a] #index :: (Identity a, Identity a) -> Identity a -> Int #unsafeIndex :: (Identity a, Identity a) -> Identity a -> IntinRange :: (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) # Methodsrange :: ((a, b), (a, b)) -> [(a, b)] #index :: ((a, b), (a, b)) -> (a, b) -> Int #unsafeIndex :: ((a, b), (a, b)) -> (a, b) -> IntinRange :: ((a, b), (a, b)) -> (a, b) -> Bool #rangeSize :: ((a, b), (a, b)) -> Int #unsafeRangeSize :: ((a, b), (a, b)) -> Int Ix (Proxy k s) # Methodsrange :: (Proxy k s, Proxy k s) -> [Proxy k s] #index :: (Proxy k s, Proxy k s) -> Proxy k s -> Int #unsafeIndex :: (Proxy k s, Proxy k s) -> Proxy k s -> IntinRange :: (Proxy k s, Proxy k s) -> Proxy k s -> Bool #rangeSize :: (Proxy k s, Proxy k s) -> Int #unsafeRangeSize :: (Proxy k s, Proxy k s) -> Int (Ix a1, Ix a2, Ix a3) => Ix (a1, a2, a3) # 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) -> IntinRange :: ((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 k a b) # Methodsrange :: (Const k a b, Const k a b) -> [Const k a b] #index :: (Const k a b, Const k a b) -> Const k a b -> Int #unsafeIndex :: (Const k a b, Const k a b) -> Const k a b -> IntinRange :: (Const k a b, Const k a b) -> Const k a b -> Bool #rangeSize :: (Const k a b, Const k a b) -> Int #unsafeRangeSize :: (Const k a b, Const k a b) -> Int (Ix a1, Ix a2, Ix a3, Ix a4) => Ix (a1, a2, a3, a4) # 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) -> IntinRange :: ((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) # 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) -> IntinRange :: ((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