Data.Array.MArray
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Разработчик | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | непереносимо (использует Data.Array.Base) |
| Safe Haskell | Надёжный |
| Язык | Haskell2010 |
Описание
Перегруженный интерфейс для изменяемых массивов. Типы массивов, которые могут использоваться с этим интерфейсом, см. в Data.Array.IO, Data.Array.ST и Data.Array.Storable.
Класс типов изменяемых массивов
class Monad m => MArray (a :: Type -> Type -> Type) e (m :: Type -> Type) Источник
Класс типов изменяемых массивов.
Тип массива имеет вид (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) Source
Создает изменяемый массив с использованием генераторной функции. Он вызывает генераторную функцию в порядке возрастания индексов.
Since: array-0.5.6.0
Чтение и запись в изменяемые массивы
readArray :: (MArray a e m, Ix i) => a i e -> i -> m e Source
Чтение элемента из изменяемого массива
writeArray :: (MArray a e m, Ix i) => a i e -> i -> e -> m () Source
Запись элемента в изменяемый массив
modifyArray :: (MArray a e m, Ix i) => a i e -> i -> (e -> e) -> m () Source
Изменение элемента в изменяемом массиве
Since: array-0.5.6.0
modifyArray' :: (MArray a e m, Ix i) => a i e -> i -> (e -> e) -> m () Source
Изменение элемента в изменяемом массиве. Строгий по отношению к записываемому элементу.
Since: array-0.5.6.0
Склады массивов
foldlMArray' :: (MArray a e m, Ix i) => (b -> e -> b) -> b -> a i e -> m b Source
Строгая аккумулирующая левоассоциативная свертка.
Since: array-0.5.8.0
foldrMArray' :: (MArray a e m, Ix i) => (e -> b -> b) -> b -> a i e -> m b Source
Строгая аккумулирующая правоассоциативная свертка.
Since: array-0.5.8.0
mapMArrayM_ :: (MArray a e m, Ix i) => (e -> m b) -> a i e -> m () Source
Преобразование элементов в монадические действия, их последовательное выполнение слева направо и отбрасывание результатов.
Since: array-0.5.8.0
forMArrayM_ :: (MArray a e m, Ix i) => a i e -> (e -> m b) -> m () Source
forMArrayM_ это mapMArrayM_ со своими аргументами, поменянными местами.
Since: array-0.5.8.0
foldlMArrayM' :: (MArray a e m, Ix i) => (b -> e -> m b) -> b -> a i e -> m b Source
Строгая аккумулирующая левоассоциативная монадическая свертка.
Since: array-0.5.8.0
foldrMArrayM' :: (MArray a e m, Ix i) => (e -> b -> m b) -> b -> a i e -> m b Source
Строгая аккумулирующая правоассоциативная монадическая свертка.
Since: 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) Source
Создает новый массив, полученный из исходного массива путем применения функции к каждому из элементов.
mapIndices :: (MArray a e m, Ix i, Ix j) => (i, i) -> (i -> j) -> a j e -> m (a i e) Source
Создает новый массив, полученный из исходного массива путем применения функции к каждому из индексов.
Распаковка изменяемых массивов
getBounds :: (MArray a e m, Ix i) => a i e -> m (i, i) Source
Возвращает границы массива (самый низкий, самый высокий).
getElems :: (MArray a e m, Ix i) => a i e -> m [e] Source
Возвращает список всех элементов изменяемого массива
getAssocs :: (MArray a e m, Ix i) => a i e -> m [(i, e)] Source
Возвращает список всех ассоциаций изменяемого массива в порядке индексов.
Преобразования между изменяемыми и неизменяемыми массивами
freeze :: (Ix i, MArray a e m, IArray b e) => a i e -> m (b i e) Source
Преобразует изменяемый массив (любой экземпляр MArray) в неизменяемый массив (любой экземпляр IArray) путем создания полной копии.
thaw :: (Ix i, IArray a e, MArray b e m) => a i e -> m (b i e) Source
Преобразует неизменяемый массив (любой экземпляр 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.12.1/docs/libraries/array-0.5.8.0-8d84/Data-Array-MArray.html