понимаю, что в типе`(STUArray s (Int,Int) (Int))` я могу использовать пару как индекс?
https://hackage.haskell.org/package/base-4.13.0.0/docs/src/GHC.Arr.html#line-298 да, инстанс Ix для пар есть
А как это работает на низком уровне? Эти индексы как-то мапятся в обычные индексы обычного массива? Или весь массив - это какая-то хэшмапа?
Как раз по ссылке формула, спасибо unsafeIndex ((l1,l2),(u1,u2)) (i1,i2) = unsafeIndex (l1,u1) i1 * unsafeRangeSize (l2,u2) + unsafeIndex (l2,u2) i2 То есть берем индекс (i1,i2) из диапазона ((l1,l2), (u1,u2)) Допустим, у меня индексы из диапазона ((1000,1000), (10000, 10000)), но элементов у меня всего 5. Как это будет лежать в памяти?
Похоже, магии там нет, и в таком случае надо 81000000*sizeof(element), а мне нужна hashtable
Обсуждают сегодня