Evitando IORefs en código puro

Me di cuenta queData.UnionFind utiliza la mónada IO para proporcionar punteros a través de IORefs. Me imagino que todos felices llamanunsafePerformIO cuando se usa localmente en código puro, ya que la estructura de datos es muy bien entendida, pero ...

¿Existe un enfoque más limpio canónico para tales estructuras de datos? Tal vez una envoltura alrededor de IO que haga lo inevitable.unsafePerformIO ¿La "apariencia" menos insegura al prohibir la mayoría de las operaciones de IO?

Respuestas a la pregunta(1)

Su respuesta a la pregunta