Haskell中有效的编程意味着什么? 它基本上只是说使用applicative functor和简洁的函数?
答案 0 :(得分:1)
正如其他人已在评论中所述,效果要么是有副作用的,要么是副作用本身。例如,写入文件,发送网络请求可以称为效果。在Haskell中,这是使用IO monad完成的(但是,这不是最好的介绍)。
然而,即使没有涉及IO,也有其他构造看起来像是在改变某些东西。这些是作为其他monad实现的。有state monad,random monad,writer monad等等。这些也可以被认为是有效的。
对于这些单子的实际使用,人们经常使用某种形式的单子变换器。包mtl和monads-tf有助于编写这些monad。这对于使用例如状态monad和随机monad的特征进行计算是有用的。但是,您需要启用一些GHC语言扩展,但是当您习惯它时应该没有问题。还有extensible-effects,但我没有玩过它。
这是Haskell语言中相当大的一章,但它有助于编写更加可靠的代码。也许书中Learn you a Haskell for Great Good的第11章和第12章可能会帮助您解决一些问题。还有许多其他教程和博客文章(可能太多),涵盖了这些适合你的一个:)
我个人不会考虑使用普通的仿函数,因为它们只进行映射。