Я заметил, что Data.UnionFind использует монаду IO для предоставления указателей через IORefs. Я предполагаю, что каждый счастливо называет unsafePerformIO
при его локальном использовании в чистом коде, поскольку структура данных настолько хорошо понята, но..
Существует ли канонический подход к подобным структурам данных? Возможно, обертка вокруг IO делает неизбежным unsafePerformIO
менее опасным "поиском", запрещая большинство операций ввода-вывода?