见:[Real world Haskell] 中文翻译:第二章 类型与函数
副作用引入了系统全局状态与函数行为之间的依赖性。我们暂时从Haskell离开一会,并考虑命令式程序语言。假设一个函数读取并返回全局变量的值。如果其他的代码可以修改这个全局变量,那么对于这个函数的应用将依赖于这个全局变量当前的值。这个函数即使自己没有修改这个变量也将具有副作用。
副作用在函数中被无形的导入或导出。而在Haskell中,函数默认不具有副作用:一个函数的结果只依赖于明确提供给它的输入。我们称这样的函数为纯函数;具有副作用的函数是不纯的。
如果函数有副作用,可以在它的类型签名中看出来:函数的结果类型会以 IO 开头。
纯函数的运行结果只由输入参数决定。
没有评论:
发表评论