haskell - 如何知道一个表面上纯粹的 Haskell 接口(interface)何时隐藏了不安全的操作?

标签 haskell purely-functional unsafe-perform-io

我最近一直在阅读有关 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/

相关文章:

haskell - 为什么在这种情况下使用 Data.Array.Repa.Algorithms.Matrix.mmultP 会出现类型错误?

recursion - 乔尔·斯波尔斯基(Joel Spolsky)在变量值不改变和同时改变的悖论中意味着什么?

java - 如何在循环中进行一些异步调用

javascript - 使用 Redux 容器组件模式渲染动态数量的 React 子组件的稳健方法是什么?

Haskell - 想要来自不改变的文件的全局变量

haskell - 显示 IO 类型

haskell - 内存一个有效的功能

haskell - 为什么使用 -XSafe 时 runghc 失败?

haskell - Haddock 是否有可能只有一个文档文件?

Haskell 群函数/第一个元素总是丢失