在纯代码避免IORefs(Avoiding IORefs in pure code)

2019-07-29 03:02发布

我注意到, Data.UnionFind使用IO单子通过IORefs提供指针。 我想每个人都高兴地叫unsafePerformIO在纯代码在本地使用它的时候,由于数据结构是这么好理解,但..

是否有一个规范的清洁方法来这样的数据结构? 也许围绕IO的包装,使不可避免unsafePerformIO少不安全“寻找”通过禁止大部分IO操作?

Answer 1:

是否有一个规范的清洁方法来这样的数据结构? 也许围绕IO的包装,使不可避免unsafePerformIO少不安全“寻找”通过禁止大部分IO操作?

是的,正是。 你发明了ST单子 ,通过引进Launchbury和佩顿-琼斯大约20年前。

ST单子只允许本地范围的记忆效应。 这是因为它使用的类型系统来保证的副作用是不是正在使用它们的代码块的范围之外可见显着。

所以,只要你只能通过引用使用的内存,只在局部范围内,就可以避免unsafePerformIO和使用纯ST代替,例如, 实现工会找到 。



文章来源: Avoiding IORefs in pure code