Data.Ix
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддерживающий | libraries@haskell.org |
| Устойчивость | стабильная |
| Переносимость | переносимая |
| Safe Haskell | Надежная |
| Язык | Haskell2010 |
Содержание
Описание
Класс Ix используется для отображения непрерывного поддиапазона значений в типе на целые числа. Он используется в основном для индексирования массивов (см. пакет array). Ix использует порядок строк.
Класс Ix
class Ord a => Ix a where Исходный код
Класс Ix используется для отображения непрерывного поддиапазона значений в типе на целые числа. Он используется в основном для индексирования массивов (см. пакет array).
Первый аргумент (l,u) каждой из этих операций — пара, определяющая нижнюю и верхнюю границы непрерывного поддиапазона значений.
Реализация имеет право предполагать следующие законы об этих операциях:
-
inRange (l,u) i == elem i (range (l,u)) -
range (l,u) !! index (l,u) i == i, когда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
Методы
range :: (a, a) -> [a] Исходный код
Список значений в поддиапазоне, определенном парой границ.
index :: (a, a) -> a -> Int Исходный код
Позиция индекса в поддиапазоне.
inRange :: (a, a) -> a -> Bool Исходный код
Возвращает True, лежит ли заданный индекс в диапазоне, определенном парой границ.
rangeSize :: (a, a) -> Int Исходный код
Размер поддиапазона, определенного парой границ.
Экземпляры
Определено в Data.Functor.Identity Методыrange :: (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) | С момента: base-2.1 |
Определено в GHC.Ix Методыrange :: ((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) | С момента: base-4.7.0.0 |
Определено в Data.Proxy Методыrange :: (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) | С момента: base-2.1 |
Определено в GHC.Ix Методыrange :: ((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) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Const Методыrange :: (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) | С версии: base-2.1 |
Определено в GHC.Ix Методыrange :: ((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) | С версии: base-2.1 |
Определено в GHC.Ix Методыrange :: ((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 Исходный код | |
Вывод экземпляров Ix
Объявления экземпляров, выведенные для класса Ix, возможны только для перечислений (т. е. типов данных, имеющих только нульарные конструкторы) и типов данных с единственным конструктором, включая произвольно большие кортежи, составные типы которых являются экземплярами Ix.
- Для перечисления нульарные конструкторы предполагаются пронумерованными слева направо с индексами от 0 до n-1 включительно. Это тот же порядок, что и в классе
Enum. Например, для типа данных:
data Colour = Red | Orange | Yellow | Green | Blue | Indigo | Violet
у нас будет:
range (Yellow,Blue) == [Yellow,Green,Blue]
index (Yellow,Blue) Green == 1
inRange (Yellow,Blue) Red == False
- Для типов данных с единственным конструктором объявления выведенных экземпляров аналогичны тем, которые показаны для кортежей в главе 19, разделе 2 отчёта Haskell 2010: https://www.haskell.org/onlinereport/haskell2010/haskellch19.html.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Ix.html