在 APL 和 Haskell 中,术语 monad 是指两个完全不同的事物,还是从两个不同的角度看待同一事物。
我对这两种语言都很陌生,并试图理解更高层次的概念。
完全不同,在 Haskell 中,monad 是任何配备两个功能的东西
bind :: m a -> (a -> m b) -> m b
return :: a -> m a
还有一些关于他们如何一起玩的规则。它实际上是范畴论的构造。
在 APL 中,monad 只是描述函数(动词)需要多少参数的术语。看来,“monad”可以用作“一元函数”的同义词,是逻辑和语言学中常见的术语。
两种完全不同的东西!Monad 经常与“Dyad”和“Triad”串联,意思是“一”、“二”、“三”。在 APL 的情况下,它表示“一个参数”。
Haskell 中的 Monad 完全不同。他们可能从“monoid”和“operad”中获取词源,这两者也完全不同。
据我所知,它们是不同的东西。如果 APL 的 monad 只是一个只有一个参数的动词(就像这个页面让我相信的那样;我不知道 APL),它与 Haskell 的 monad 非常不同,它来自范畴论,与 arity 无关的功能。
APL 程序员和 APL 文档很少使用术语“monad”。相反,它们将引用“monadic 函数”(一个只接受单个参数的函数)或“一个名为 monadicly 的函数”(一个省略可选参数的函数)。这些都与 Haskell 对“Monad”一词的使用完全不同。