Haskell 单子可以被看作是计算(或计算过程)的具体化吗?
在我的第一个回答中,我会回答是的,但我找不到任何明确说明这一事实的参考资料。以下链接可以说是您索赔的证据:Haskell 单子可以被看作是计算(或计算过程)的具体化吗?,haskell,functional-programming,monads,Haskell,Functional Programming,Monads,在我的第一个回答中,我会回答是的,但我找不到任何明确说明这一事实的参考资料。以下链接可以说是您索赔的证据: 有一种情况是,这与单子无关,因为一级函数是具体化的计算。在这种情况下,由于bind的性质,任何给定的monad都只是使用一类函数的特例。为了看我从这里来,考虑lambda演算的功能。从某种意义上说,lambda演算的所有函数都是具体化的计算,因为它们是语言的重要组成部分,可以以您认为合适的任何方式进行操作。函数是计算,因此可以作为参数传递的函数是具体化的计算。是的,它们可以。此外,
有一种情况是,这与单子无关,因为一级函数是具体化的计算。在这种情况下,由于bind的性质,任何给定的monad都只是使用一类函数的特例。为了看我从这里来,考虑lambda演算的功能。从某种意义上说,lambda演算的所有函数都是具体化的计算,因为它们是语言的重要组成部分,可以以您认为合适的任何方式进行操作。函数是计算,因此可以作为参数传递的函数是具体化的计算。是的,它们可以。此外,它们可以被视为(此列表非常不完整):
- 一种实现IO的方法
- 组织图书馆的方法
- A
- 内函子范畴中的幺半体对象
- 终端双范畴的Lax函子
- 由满足以下条件的绑定和返回(或连接和返回)组成的(高阶)代数结构:
将它们视为计算/效果的具体化听起来像是一个没有内在破坏的心智模型,但我仍然建议将其抛在脑后,将单子视为一种代数结构,没有任何对微积分的特别引用来表达它们:因为这样做可以简化关于引用框架的推理,我们试图用单子(比如说,解析器)驯服自己,而不会让自己的思想纠结在(比如)lambda微积分中。是的,它们可以(基本上是根据定义)。你还想要什么吗?单子是一种物化,一种效果的概括。Axex的答案很好,lambda演算已经谈到了可计算函数(计算)。单子是描述有效计算的一种方式:输出(
编写器
)、依赖(读取器
)、继续(继续
)、状态(状态
)、失败(可能
)、异常(或者
)、不确定性([
)。所有的“附加效果”都在可计算函数的基本概念之上。@luqui:太糟糕了,这只是一个注释。如果这是一个答案,我会投上十几次赞成票。