Вы можете использовать thaw
в IO
:
do storableArray <- thaw uArray
...
Копирует весь массив, но, вероятно, более эффективно, чем рукописный код, делает то же самое. Если вы знаете, что не собираетесь снова обращаться к UArray
, тогда вы можете использовать unsafeThaw
, но в текущих реализациях библиотеки это все равно может привести к полной копии. (Типы массивов с реализацией без копирования unsafeThaw
перечислены в его документации.)
Возможно, существует непереносимый способ получить необработанный указатель, лежащий за UArray
, но я не смог найти его в GHC.Exts
.