Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 单子可以被看作是计算(或计算过程)的具体化吗?_Haskell_Functional Programming_Monads - Fatal编程技术网

Haskell 单子可以被看作是计算(或计算过程)的具体化吗?

Haskell 单子可以被看作是计算(或计算过程)的具体化吗?,haskell,functional-programming,monads,Haskell,Functional Programming,Monads,在我的第一个回答中,我会回答是的,但我找不到任何明确说明这一事实的参考资料。以下链接可以说是您索赔的证据: 有一种情况是,这与单子无关,因为一级函数是具体化的计算。在这种情况下,由于bind的性质,任何给定的monad都只是使用一类函数的特例。为了看我从这里来,考虑lambda演算的功能。从某种意义上说,lambda演算的所有函数都是具体化的计算,因为它们是语言的重要组成部分,可以以您认为合适的任何方式进行操作。函数是计算,因此可以作为参数传递的函数是具体化的计算。是的,它们可以。此外,

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

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


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

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

  • 一种实现IO的方法
  • 组织图书馆的方法
  • A
  • 内函子范畴中的幺半体对象
  • 终端双范畴的Lax函子
  • 由满足以下条件的绑定和返回(或连接和返回)组成的(高阶)代数结构:
在这些(包括你的)定义中,我认为只有最后三个定义告诉我们单子是什么:代数结构。其他一切都告诉我们单子的用途,给出一个(坏到有缺陷的)隐喻,说一个特定的微积分是如何表达单子的,或者,像你一样,详细说明单子在某个参照系中的含义(例如lambda微积分)


将它们视为计算/效果的具体化听起来像是一个没有内在破坏的心智模型,但我仍然建议将其抛在脑后,将单子视为一种代数结构,没有任何对微积分的特别引用来表达它们:因为这样做可以简化关于引用框架的推理,我们试图用单子(比如说,解析器)驯服自己,而不会让自己的思想纠结在(比如)lambda微积分中。

是的,它们可以(基本上是根据定义)。你还想要什么吗?单子是一种物化,一种效果的概括。Axex的答案很好,lambda演算已经谈到了可计算函数(计算)。单子是描述有效计算的一种方式:输出(
编写器
)、依赖(
读取器
)、继续(
继续
)、状态(
状态
)、失败(
可能
)、异常(
或者
)、不确定性(
[
)。所有的“附加效果”都在可计算函数的基本概念之上。@luqui:太糟糕了,这只是一个注释。如果这是一个答案,我会投上十几次赞成票。