【发布时间】:2012-12-27 01:31:16
【问题描述】:
我是一个完整的新手,目前正在尝试使用“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)绝对值得一读。
【问题讨论】:
-
我喜欢使用的一个经验法则是,任何纯值都可以在编译时完全评估。
标签: haskell io command-line-arguments referential-transparency