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

时间:2011-02-17 05:20:43

标签: haskell functional-programming monads

在我的第一个analysis中我会回答是,但我找不到任何明确陈述这一事实的参考。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

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

  • Burritos
  • 一种做IO的方法
  • 组织图书馆的方法
  • A somewhat organised heap of objects
  • endofunctor类别中的Monoidal对象
  • 来自终端bicategory的Lax仿函数
  • 由满足monad laws
  • 的绑定和返回(或加入和返回)组成的(高阶)代数结构

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

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