gpt4 book ai didi

haskell - 为什么是 getArgs 和 getProgName IO 操作?

转载 作者:行者123 更新时间:2023-12-03 11:46:39 27 4
gpt4 key购买 nike

我是一个完整的新手,目前正在尝试使用“Learn You a Haskell for Great Good”来学习 Haskell。我已联系 the section explaining how to work with command line arguments ,有些事情困扰着我。

据我了解(和 haskell.org's definition ),操作旨在封装副作用。对于给定的程序实例,命令行参数是不可变的输入,那么拥有 getProgName :: IO String 的意义何在?而不是 getProgName :: String ?换一种说法:阻止纯函数调用 getProgName 的意义何在? ?

更新

到目前为止,我对这个问题有一些很好的答案。我接受 Don Stewart's作为最简单简洁的,但是Conal's (及其相关的 blog post )绝对值得一读。

最佳答案

首先,getArgs可以在运行时更改。见 withArgs .

其次,getArgsgetProgName属于一类有趣的不纯计算——它们在程序运行期间被认为是常量,但是,它们在编译时不是可用的值,并且它们从一个程序运行到另一个程序运行时会发生变化。它们没有明确的外延。

参见例如较早 discussions ,其中讨论了 getArgs 和浮点计算。甚至可以认为 minBound/maxBound 属于此类。

关于haskell - 为什么是 getArgs 和 getProgName IO 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295582/

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