Unikanie IORef w czystym kodzie

zauważyłem toData.UnionFind używa IO monad do dostarczania wskaźników za pośrednictwem IORefs. Wyobrażam sobie, że wszyscy radośnie dzwoniąunsafePerformIO gdy używa się go lokalnie w czystym kodzie, ponieważ struktura danych jest tak dobrze zrozumiana, ale ..

Czy istnieje kanoniczne czystsze podejście do takich struktur danych? Być może opakowanie wokół IO sprawia, że ​​jest to nieuniknioneunsafePerformIO mniej niebezpieczne „szukanie” poprzez zakaz większości operacji IO?

questionAnswers(1)

yourAnswerToTheQuestion