我在某处读到jQuery是monad而this answer表明underscore.js库中的链函数不是monad(但是comonad)。和answer to this相似,表明它是幺半群。
那么,jQuery是monad吗?
答案 0 :(得分:31)
大多数API不符合monad法律。 jQuery
是一个很大的API
,因此从统计上来说,它不太可能是“意外”的monadic。因此,我非常怀疑jQuery
API作为一个整体可以满足monad定律(即“jQuery是monad”)。
这并不意味着给定(非常受限制)的子集可能不满足它们,但API作为一个整体可能包含“不安全”操作,这些操作在使用时会违反法律,从而破坏了抽象。
由于似乎没有人提供证据证明整个或部分API符合法律,我建议我们应该假设它没有,直到提供证据。
必须显示:
return
(将值提升到jQuery monad中)?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”会很容易。