我在某处读到 jQuery 是一个单子,这个答案表明 underscore.js 库中的链函数不是单子(而是comonad)。并且对此类似的答案表明这是幺半群。
那么,jQuery 是一个单子吗?
大多数 API 不满足单子定律。jQuery
是一个很大的API
,因此在统计上,它不太可能是“偶然”的单子。因此,我非常怀疑jQuery
整个 API 能否满足单子定律(即“jQuery 是单子”)。
这并不意味着给定的(非常受限的)子集可能无法满足它们,但整个 API 可能包含“不安全”的操作,这些操作在使用时会违反法律,从而破坏抽象。
由于似乎没有人提供证据证明 API 全部或部分满足法律,我建议我们应该假设它不满足,直到提供证据。
必须显示:
return
(将值提升到 jQuery monad)?bind
,用于将计算粘合在一起?然后,考虑到 jQuery API 的其余部分,哪些违法行为是可能的?例如,我可以bind
通过调用其他 API 函数之一来破坏吗?
参考:
我认为您指的是 jQuery 的隐式循环行为。在这方面,jQuery 类似于在 list monad 中工作,其中链接相当于bind
,并且将元素包装在其中$()
类似于return
(我猜)。
因此,在 jquery 中,您可以将一个新的列表元素附加到一堆 div 列表中:
$('div').children().append("<li>New list element</li>");
...在哈斯克尔你可能有:
appendToEachList divs = divs >>= children >>= append "<li>New list element</li>"
以上来自记忆,应该被认为是伪代码废话。
无论如何,我认为说“jQuery 是一个 Monad”有点牵强。