Я делаю привязку Haskell к библиотеке загрузки изображений и хочу максимально избегать копирования. Когда изображение загружено, я получаю структуру данных из библиотеки C, содержащую данные изображения. Теперь эта структура во всех смыслах неизменяема, но чтение данных из нее в Haskell — это действие ввода-вывода. Можно ли использовать unsafePerformIO (или, возможно, unsafeDupablePerformIO для еще большей производительности), чтобы избежать копирования памяти в массив Haskell или что-то подобное? Конечно, мне нужно было бы инкапсулировать указатель структуры данных в ForeignPtr или подобное и гарантировать, что указатель не может быть доступен или изменен каким-либо другим способом.
Какова конвенция в таких случаях?