Jef*_*ges 25 monads haskell data-structures union-find ioref
我注意到Data.UnionFind使用IO monad通过IORefs提供指针.我想大家都很乐意unsafePerformIO在纯代码中本地使用它,因为数据结构很好理解,但是......
这种数据结构是否有规范的清洁方法?也许是IO的包装,unsafePerformIO通过禁止大多数IO操作,不可避免地"不安全""看"?
Don*_*art 32
这种数据结构是否有规范的清洁方法?也许IO的包装器通过禁止大多数IO操作使不可避免的不安全的PerformIO不那么不安全"看"了?
是的,确切地说.大约20年前,你刚刚发明了由Launchbury和Peyton Jones推出的ST monad.
该ST单子只允许本地范围的记忆效应.值得注意的是,它使用类型系统来保证在使用它们的代码块范围之外看不到副作用.
因此,只要您通过引用仅使用内存,仅在本地范围内,您可以避免unsafePerformIO使用纯ST,例如,实现union-find.