Functional programming 单子除了提高可读性和生产效率之外还能做什么?

Functional programming 单子除了提高可读性和生产效率之外还能做什么?,functional-programming,monads,Functional Programming,Monads,在过去的几个月里,我一直在研究单子(函子和应用函子)。我一直试图弄清楚单子在一般意义上什么时候有用。如果我在看一段我问的代码,我应该使用特定的monad还是通过transformers使用堆栈?在我的努力中,我想我已经找到了答案,但我希望其他人能提供意见,以防我遗漏了什么。在我看来,单子对于抽象出特定的管道系统非常有用,以提高代码的可读性/去极化性质,这可能会产生副作用,通过减少代码编写量来提高生产率。我能找到的唯一例外是IO单子,它试图在IO面前保持纯函数的纯。似乎一个给定的单子并不能解决通过

在过去的几个月里,我一直在研究单子(函子和应用函子)。我一直试图弄清楚单子在一般意义上什么时候有用。如果我在看一段我问的代码,我应该使用特定的monad还是通过transformers使用堆栈?在我的努力中,我想我已经找到了答案,但我希望其他人能提供意见,以防我遗漏了什么。在我看来,单子对于抽象出特定的管道系统非常有用,以提高代码的可读性/去极化性质,这可能会产生副作用,通过减少代码编写量来提高生产率。我能找到的唯一例外是IO单子,它试图在IO面前保持纯函数的纯。似乎一个给定的单子并不能解决通过其他方法无法解决的问题。我遗漏了什么吗?

除了图灵完整性之外,还有什么特性可以解决其他方法无法解决的问题吗?不。所有图灵等价语言都是表达相同基本事物的不同方式。由于monad是由更基本的构建块构建而成的,显然这组构建块能够完成monad所能做的任何事情。当我们谈论一种语言或功能“允许”我们做某事时,我们的意思是它允许我们以一种易于理解的方式自然地表达那件事。

几乎所有的语言结构都是这样吗?你可以使用通用寄存器机的四条简单指令编写每个程序,但你不想这样做。因此,一个更合适的问题(问我自己更合适,不是这样)是,一个给定的monad的好处何时超过它的成本,或者更一般地说,给定代码的机会成本是多少。通过写一种方式,我错过了什么其他的写作方式,好的还是坏的。嗯