jQuery是monad吗?

时间:2012-05-08 10:35:05

标签: jquery functional-programming monads

我在某处读到jQuery是monad而this answer表明underscore.js库中的链函数不是monad(但是comonad)。和answer to this相似,表明它是幺半群。

那么,jQuery是monad吗?

2 个答案:

答案 0 :(得分:31)

大多数API不符合monad法律。 jQuery是一个很大的API,因此从统计上来说,它不太可能是“意外”的monadic。因此,我非常怀疑jQuery API作为一个整体可以满足monad定律(即“jQuery是monad”)。

这并不意味着给定(非常受限制)的子集可能不满足它们,但API作为一个整体可能包含“不安全”操作,这些操作在使用时会违反法律,从而破坏了抽象。

由于似乎没有人提供证据证明整个或部分API符合法律,我建议我们应该假设它没有,直到提供证据。

必须显示:

  • jQuery操作对应return(将值提升到jQuery monad中)?
  • jQuery操作对应于bind,用于将计算粘合在一起?
  • 左,右和相关性法如何对这些行动产生影响?

然后,鉴于jQuery API的其余部分,可能会违反哪些法律?例如,我可以通过调用其他API函数来中断bind吗?

参考文献:

答案 1 :(得分:11)

我认为你指的是jQuery的隐式循环行为。在这方面,jQuery类似于在列表monad中工作,其中链接等同于bind,并且在$()中包含元素类似于return(我猜)。

所以使用jquery你可以将一个新的列表元素附加到一堆div列表中:

$('div').children().append("<li>New list element</li>");

...在你可能有的haskell中:

appendToEachList divs = divs >>= children >>= append "<li>New list element</li>"

以上内容来自内存,应被视为伪代码废话。

无论如何,我认为说“jQuery是Monad”会很容易。