Я принял ответ на вопрос ниже, но, похоже, я не понял, как работают массивы в haskell. Я думал, что они были просто усиленными списками. Помните об этом при чтении вопроса ниже.
Я обнаружил, что монолитные массивы в haskell довольно неэффективны при использовании их для больших массивов.
Мне не удалось найти немонолитную реализацию массивов в haskell. Мне нужно, чтобы O (1) время просматривало многомерный массив.
Есть ли реализация массивов, которые поддерживают это?
EDIT: Я, кажется, неправильно понял термин монолит. Проблема в том, что, похоже, массивы в haskell обрабатывают массив, подобный списку. Возможно, я ошибаюсь.
EDIT2: Краткий пример неэффективного кода:
fibArray n = a where
bnds = (0,n)
a = array bnds [ (i, f i) | i <- range bnds ]
f 0 = 0
f 1 = 1
f i = a!(i-1) + a!(i-2)
это массив длины n+1
, где i-е поле содержит i-е число фибоначчи. Но поскольку массивы в haskell имеют время поиска O (n), для вычисления требуется время O (n²).