Data.Array.MArray
| Авторские права | (c) Университет Глазго, 2001 |
|---|---|
| Лицензия | В стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | непереносимый (использует Data.Array.Base) |
| Безопасный Haskell | Доверенный |
| Язык | Haskell2010 |
Описание
Перегруженный интерфейс для изменяемых массивов. Типы массивов, которые можно использовать с этим интерфейсом, см. в Data.Array.IO, Data.Array.ST и Data.Array.Storable.
Класс изменяемых типов массивов
class Monad m => MArray (a :: Type -> Type -> Type) e (m :: Type -> Type) Source
Класс изменяемых типов массивов.
Тип массива имеет вид (a i e), где a — конструктор типа массива (вид * -> * -> *), i — тип индекса (элемент класса Ix), а e — тип элемента.
Класс MArray параметризован как a, так и e (поэтому можно определять экземпляры, специализированные для определённых типов элементов, аналогично IArray), а также типом монады m, в которой будет выполняться работа с изменяемым массивом.
Минимальное полное определение
getBounds, getNumElements, (newArray | unsafeNewArray_), unsafeRead, unsafeWrite
Экземпляры
Класс Ix и операции
module Data.Ix
Создание изменяемых массивов
newArray :: (MArray a e m, Ix i) => (i, i) -> e -> m (a i e) Исходный код
Создаёт новый массив, инициализируя каждый элемент указанным значением. Первый и второй элементы кортежа задают соответственно наименьший и наибольший индексы.
newArray_ :: (MArray a e m, Ix i) => (i, i) -> m (a i e) Исходный код
Создаёт новый массив, инициализируя каждый элемент неопределённым значением. В монадическом контексте, где операции должны быть детерминированными (например, в монаде ST), элементы массива инициализируются фиксированным, но неопределённым значением, например нулём. Первый и второй элементы кортежа задают соответственно наименьший и наибольший индексы.
newListArray :: (MArray a e m, Ix i) => (i, i) -> [e] -> m (a i e) Исходный код
Создаёт изменяемый массив из списка начальных элементов. Элементы массива задаются в списке в порядке возрастания, начиная с наименьшего индекса. Первый и второй элементы кортежа задают соответственно наименьший и наибольший индексы.
newGenArray :: (MArray a e m, Ix i) => (i, i) -> (i -> m e) -> m (a i e) Исходный код
Создаёт изменяемый массив с помощью функции-генератора. Функция-генератор вызывается для индексов в порядке возрастания.
Добавлено в версии: array-0.5.6.0
Чтение и запись в изменяемые массивы
readArray :: (MArray a e m, Ix i) => a i e -> i -> m e Исходный код
Читает элемент из изменяемого массива
writeArray :: (MArray a e m, Ix i) => a i e -> i -> e -> m () Исходный код
Записывает элемент в изменяемый массив
modifyArray :: (MArray a e m, Ix i) => a i e -> i -> (e -> e) -> m () Исходный код
Изменяет элемент изменяемого массива
Добавлено в версии: array-0.5.6.0
modifyArray' :: (MArray a e m, Ix i) => a i e -> i -> (e -> e) -> m () Исходный код
Изменяет элемент изменяемого массива. Записываемый элемент вычисляется строго.
Добавлено в версии: array-0.5.6.0
Свёртки массивов
foldlMArray' :: (MArray a e m, Ix i) => (b -> e -> b) -> b -> a i e -> m b Исходный код
Строгая левоассоциативная свёртка с накоплением.
Добавлено в версии: array-0.5.8.0
foldrMArray' :: (MArray a e m, Ix i) => (e -> b -> b) -> b -> a i e -> m b Исходный код
Строгая правоассоциативная свёртка с накоплением.
Добавлено в версии: array-0.5.8.0
mapMArrayM_ :: (MArray a e m, Ix i) => (e -> m b) -> a i e -> m () Исходный код
Преобразует элементы в монадические действия, выполняет их последовательно слева направо и отбрасывает результаты.
Добавлено в версии: array-0.5.8.0
forMArrayM_ :: (MArray a e m, Ix i) => a i e -> (e -> m b) -> m () Исходный код
forMArrayM_ — это mapMArrayM_ с аргументами в обратном порядке.
Добавлено в версии: array-0.5.8.0
foldlMArrayM' :: (MArray a e m, Ix i) => (b -> e -> m b) -> b -> a i e -> m b Исходный код
Строгая левоассоциативная монадическая свёртка с накоплением.
Добавлено в версии: array-0.5.8.0
foldrMArrayM' :: (MArray a e m, Ix i) => (e -> b -> m b) -> b -> a i e -> m b Исходный код
Строгая правоассоциативная монадическая свёртка с накоплением.
Добавлено в версии: array-0.5.8.0
Производные массивы
mapArray :: (MArray a e' m, MArray a e m, Ix i) => (e' -> e) -> a i e' -> m (a i e) Исходный код
Создаёт новый массив на основе исходного, применяя функцию к каждому элементу.
mapIndices :: (MArray a e m, Ix i, Ix j) => (i, i) -> (i -> j) -> a j e -> m (a i e) Исходный код
Создаёт новый массив на основе исходного, применяя функцию к каждому индексу.
Разбор изменяемых массивов
getBounds :: (MArray a e m, Ix i) => a i e -> m (i, i) Исходный код
Возвращает границы массива (наименьший, наибольший индексы).
getElems :: (MArray a e m, Ix i) => a i e -> m [e] Исходный код
Возвращает список всех элементов изменяемого массива
getAssocs :: (MArray a e m, Ix i) => a i e -> m [(i, e)] Исходный код
Возвращает список всех пар индексов и значений изменяемого массива в порядке индексов.
Преобразование изменяемых и неизменяемых массивов
freeze :: (Ix i, MArray a e m, IArray b e) => a i e -> m (b i e) Исходный код
Преобразует изменяемый массив (любой экземпляр MArray) в неизменяемый массив (любой экземпляр IArray), создавая его полную копию.
thaw :: (Ix i, IArray a e, MArray b e m) => a i e -> m (b i e) Исходный код
Преобразует неизменяемый массив (любой экземпляр IArray) в изменяемый массив (любой экземпляр MArray), создавая его полную копию.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/array-0.5.8.0-93e8/Data-Array-MArray.html