Главная » Haskell » Модуль Ix

0

В модуле Ix описан класс, который используется как интерфейс к типам данных, представляющих значения, которые  могут  использоваться в качестве  индексов (индексация сопоставляет  некоторое непрерывное множество с набором значений экземпляров описываемого класса). Например, этот класс используется для индексации массивов IArray (см. стр. 233) и MArray (см. стр. 237). Использование:

import Data.Ix

Соответственно, в этом модуле описан только сам класс и несколько его экземпляров.

Класс:  Ix

Описание: класс типов, чьи значения могут использоваться для индексации.

Определение:

class Ord a => Ix a  where range         ::  (a, a)  ->  [a]

index          :: (a, a)  ->  a  ->  Int inRange     :: (a,  a)  ->  a ->  Bool rangeSize  :: (a, a)  ->  Int

Во всех методах класса первый аргумент вида (l, u) представляет пару чисел, которые являются нижней и верхней границей области индексации. Каждый экземпляр этого класса должен выполнять следующие законы:

1)                        inRange (l, u)  i == elem i (range  (l, u))

2)                        range  (l, u)  !! index  (l, u)  i == i, when inRange (l, u)  i

3)                        map  (index (l, u)) (range  (l, u))) == [0..rangeSize (l, u)  1]

4)                        rangeSize  (l, u)  == length (range  (l, u))

Метод range возвращает список индексов, определённых нижней и верхней границей области индексации. Метод index возвращает номер позиции заданного индекса в области индексации (позиции нумеруются с 0). Также и метод inRange возвращает значение True, если заданное значение индекса лежит в области индексации.

Наконец, метод rangeSize возвращает размер области индексации. Этот метод имеет реализацию по умолчанию, а поэтому может не определяться для экземпляров.

Для   класса  Ix  определены следующие экземпляры:  Bool,   Char,  Day, GeneralCategory,   IOMode, Int,   Int16,  Int32,  Int64,   Int8,   Integer,  Month, Ordering,  SeekMode, Word, Word16, Word32, Word64 и Word8. Кроме того, для кортежей размеров от 0 для 5 также определены экземпляры класса Ix.

Для этого класса также могут быть автоматически построены экземпляры. Они могут быть построены только для перечислений либо для алгебраических типов данных с одним конструктором, компоненты которого также являются экземплярами класса Ix. Для кортежей произвольного размера также могут быть построены экземпляры класса Ix автоматически опять же при условии, что в такие кортежи входят в качестве компонентов только экземпляры этого класса.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии