gpt4 book ai didi

haskell - 考虑到 unsafePerformIO,Haskell 真的是一种纯函数式语言吗?

转载 作者:行者123 更新时间:2023-12-02 04:41:29 25 4
gpt4 key购买 nike

Haskell 通常被视为纯函数式语言的示例。鉴于 System.IO.Unsafe.unsafePerformIO 的存在,这如何合理?

编辑:我认为“纯功能”意味着不可能将不纯的代码引入到程序的功能部分中。

最佳答案

我们称之为 Haskell 的语言

unsafePerformIO外部函数接口(interface)规范的一部分,不是核心 Haskell 98规范。它可用于执行不会逃逸某些范围的局部副作用,以便公开纯函数式接口(interface)。也就是说,当类型检查器无法为我们隐藏效果时,我们使用它来隐藏效果(与 ST monad 不同,它通过静态保证隐藏效果)。

为了准确说明我们称为“Haskell”的多种语言,请考虑下图。每个环对应于一组特定的计算功能,按安全性排序,并具有与表达能力相关的区域(即,如果您具有该功能,您可以编写的程序数量)。

被称为 Haskell 98 的语言在中间指定,允许全部和部分函数。 Agda (或 Epigram ),其中只允许总函数,表达能力更差,但“更纯粹”且更安全。而我们今天使用的 Haskell 则包含了 FFI 的所有内容,而 unsafePerformIO 就位于其中。也就是说,您可以在现代 Haskell 中编写任何内容,但如果您使用外环中的内容,则建立由内环简化的安全和保障保证将会更加困难。

alt text

因此,Haskell 程序通常不是由 100% 引用透明的代码构建的,但是,它是唯一默认纯粹的中等通用语言。

关于haskell - 考虑到 unsafePerformIO,Haskell 真的是一种纯函数式语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com