Me di cuenta de que Data.UnionFind utiliza la mónada IO para proporcionar punteros a través de IORefs. Me imagino que todos felizmente llaman al unsafePerformIO
cuando lo usan localmente en código puro, ya que la estructura de datos se entiende tan bien, pero ...Evitar IORefs en código puro
¿Existe un enfoque de limpieza canónica para tales estructuras de datos? ¿Quizás un envoltorio alrededor de IO que hace que el inevitable unsafePerformIO
sea menos seguro al "mirar" al prohibir la mayoría de las operaciones de E/S?
Creo que el paquete está destinado a ser utilizado dentro de la mónada IO. La mayoría de los Haskellers se mantienen lo más lejos posible de 'inseguroPerformIO'. –