monad可以被视为计算(或计算过程)的具体化吗?

Gre*_*eek 3 monads haskell functional-programming

在我的第一个分析中,我会回答是,但我无法找到任何明确说明这一事实的参考.

Axl*_*xle 6

以下链接可以说是您索赔的证据:

可以认为这与Monads无关,因为第一类函数是有效的计算.在这种情况下,由于绑定的性质,任何给定的monad只是使用第一类函数的特例.要查看我来自这里的位置,请考虑lambda演算的功能.从某种意义上说,lambda演算的所有函数都是有效的计算,因为它们是语言重要组成部分,可以用你认为合适的任何方式进行操作.函数是计算,因此可以作为参数传递的函数是具体的计算.


bar*_*oap 5

是的他们可以.此外,它们可以被视为(此列表非常不完整):

  • 卷饼
  • 一种做IO的方法
  • 一种组织库的方法
  • 一个物体有点有组织堆
  • 一类endofunctors中的Monoidal对象
  • 来自终端bicategory的Lax仿函数
  • 一个(高阶)代数结构,包括满足monad定律的bind和return(或join和return)

在这些(包括你的)中,我会声称只有最后三个定义告诉我们monad 什么:一个代数结构.其他一切都告诉我们monad用于什么,给出一个(坏到有缺陷的)隐喻,说明一个特定的微积分如何表达monad,或者像你的一样,详细说明monads在某个参考框架中的含义(例如lambda演算).

将它们视为计算/效果的具体化听起来就像一个本质上没有被破坏的心理模型,但我仍然建议将它留在后面并将monad视为代数结构,没有任何特定的参考用于表达它们的微积分:由于这个简单的原因,这样做可以简化对引用框架的推理,一个人试图用一个monad(比如一个解析器)来驯服,而不会让一个人的想法纠缠在一起,例如,lambda演算.