Главная » Haskell » Модуль ST описание реализации изменяемых массивов

0

 содержит описание реализации изменяемых массивов  (ограниченных и неограниченных) для монады ST  (преобразователь  монады State  — см. подраздел 7.5.3.). Использование этого модуля выглядит так:

import  Data.Array.ST

Этот модуль также импортирует для работы своих функций модуль MArray (см. подраздел 8.1.5.), поэтому при использовании рассматриваемого модуля импортировать модуль MArray нет необходимости.

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

Тип: STArray

Описание: Изменяемый ограниченный нестрогий массив в монаде ST.

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

data  STArray  s  i e = …

Тип определён в виде примитива.

В этом определении тип s является типом состояния в монаде ST, тип i — как обычно, тип индекса (должен быть экземпляром класса Ix), а e — тип элементов в массиве.

Тип STArray имеет экземпляры для следующих классов: Typeable3, MArray

и Eq.

Тип: STUArray

Описание: Изменяемый неограниченный строгий массив в монаде ST.

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

data  STUArray  s  i e = …

Тип определён в виде примитива.

В этом определении типы соответствуют тому же, что и в определении типа STArray. Этот тип обычно более эффективен  (и с точки зрения времени исполнения, и с точки  зрения занимаемого  пространства), чем тип STArray, но он строгий, поэтому если имеется необходимость ленивых вычислений с массивами, надо использовать тип STArray.

Тип STUArray имеет экземпляр для класса Typeable3, а также порядка двадцати различных экземпляров класса MArray для  различных типов элементов (охватываются  все примитивные  типы данных).

С перечисленными типами данных работают три прикладные функции.

Функция: runSTArray

Описание: безопасный  способ создания и работы с изменяемым  ограниченным  массивом перед возвращением неизменяемого массива для дальнейшего использования. Эта функция не копирует массив перед его возвращением, она использует небезопасную  примитивную функцию unsafeFreezeSTArray,  однако сама функция является безопасной оболочкой к опасной.

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

runSTArray  :: Ix i => (forall s  . ST  s  (STArray  s  i e)) ->  Array  i e runSTArray  st = runST (st >>= unsafeFreezeSTArray)

Функция: runSTUArray

Описание: безопасный способ создания и работы с изменяемым неограниченным массивом перед возвращением неизменяемого массива для дальнейшего использования. Эта функция не копирует массив перед его возвращением, она использует небезопасную примитивную функцию unsafeFreezeSTUArray, однако сама функция является безопасной оболочкой к опасной.

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

runSTUArray :: Ix i => (forall s  . ST  s  (STUArray s  i e)) ->  UArray  i e runSTUArray st = runST (st >>= unsafeFreezeSTUArray)

Функция: castSTUArray

Описание: преобразует один массив типа STUArray в другой (изменяя при необходимости тип элементов). Все элементы в получаемом массиве не определены. Определение:

castSTUArray  :: STUArray s  i a ->  ST  s  (STUArray s  i b)

Функция определена в виде примитива.

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

По теме:

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