Haskell的Monad与APL的Monad比较

10
在 APL 和 Haskell 中,术语“monad”是两个完全不同的东西,还是从两个不同的角度看到同一个东西。
我对这两种语言都比较新,正在努力理解更高级的概念。
4个回答

12

完全不同,在Haskell中,单子是任何配备有两个函数的东西

bind :: m a -> (a -> m b) -> m b
return :: a -> m a

关于它们如何一起运作,有一些规则。实际上,这是范畴论中的构造。

在 APL 中,单子是用来描述函数(动词)需要多少参数的术语。似乎“单子”可以用作“一元函数”的同义词,并且是逻辑和语言学中常见的术语。


值得注意的是,“一元函数”是一种过度简化,因为“-1 2 3 4 5 6”使用“-”函数“单子地”,而“1 2 3 - 4 5 6”则使用它“双子地”。单子意味着“仅使用右侧参数”,并且更喜欢不将其与严格接受一个参数的“一元”函数混淆。 - Electric Coffee

6

完全不同的两个东西!Monad通常与“Dyad”和“Triad”连用,分别意味着“一个”,“两个”,“三个”。在APL中,它表示“一个参数”。

Haskell中的Monads则完全不同。它们可能源于“monoid”和“operad”,这两者也完全不同。


3
单子的词源:http://english.stackexchange.com/questions/30654/where-does-the-term-monad-come-from - luqui

3
据我所知,它们是不同的东西。如果APL的单子是一个只有一个参数的动词(如这个页面所说的那样;我不懂APL),那么它与Haskell的单子非常不同,后者来自范畴论,与函数的元数无关。

0
APL程序员和APL文档很少使用术语“单子”。相反,他们会提到“单子函数”(只接受一个参数的函数)或“以单子方式调用的函数”(省略可选参数的函数)。这两者都与Haskell中“Monad”一词的使用完全不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接