我最近一直在阅读有关 unsafePerformIO
的内容,我想问你一些事情。我认为真正的语言应该能够与外部环境交互,所以 unsafePerformIO
是有道理的。
但是,据我所知,我不知道有什么快速方法可以在不检查代码以搜索对 unsafePerformIO
的调用的情况下知道明显纯净的(从类型判断)接口(interface)/库是否真的纯净(文档可能会省略提及它)。
我知道只有当您确定引用透明度得到保证时才应该使用它,但我仍然想了解它。
最佳答案
不检查源代码是没有办法的。但这并不太困难,因为 Haddock 在文档中直接提供了一个很好的链接,指向语法突出显示的定义。请参阅 this page 定义右侧的“来源”链接举个例子。
Safe Haskell与此相关;它用于在您想要禁止使用不安全功能的情况下编译 Haskell 代码。如果模块使用不安全模块(例如 System.IO.Unsafe
)并且没有专门标记为Trustworthy
,它将继承其不安全状态。但使用 unsafePerformIO
的模块通常会安全地使用它,因此声明自己值得信赖
。
关于haskell - 如何知道一个表面上纯粹的 Haskell 接口(interface)何时隐藏了不安全的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020234/