33

jQueryはモナドであるとどこかで読みましたが、この回答は、underscore.jsライブラリのチェーン関数がモナドではないことを示しています(ただし、コモナドです)。そして、似ているこれに対する答えは、それがモノイドであることを示しています。

では、jQuery はモナドですか?

4

2 に答える 2

32

ほとんどの API はモナドの法則を満たしていません。jQueryは大きいAPIので、統計的に「偶然に」モナドになる可能性は低いです。その結果、私はjQueryAPI 全体がモナドの法則 (つまり、「jQuery はモナドである」) を満たすことができるかどうかについてかなり懐疑的です。

これは、特定の (非常に制限された) サブセットがそれらを満たさない可能性があることを意味するものではありませんが、API 全体として、使用すると法律に違反し、抽象化を破る「安全でない」操作が含まれる可能性があります。

API が全体的または部分的に法律を満たしているという証拠を誰も提供していないように見えるので、証拠が提供されるまで、そうではないと仮定することをお勧めします。

それは示されなければなりません:

  • どのjQuery操作が対応しreturnますか(値をjQueryモナドに持ち上げる)?
  • bind計算を結合するために、どの jQuery 操作が に対応しますか?
  • 左、右、および結合法則は、これらの操作に対してどのように保持されますか?

それでは、jQuery API の残りの部分を考えると、どのような法律違反が考えられるのでしょうか? たとえば、bind他の API 関数の 1 つを呼び出して を中断できますか?

参考文献:

于 2012-05-08T13:33:23.790 に答える
12

jQuery の暗黙的なループ動作について言及していると思います。その点で、jQuery はリスト モナドでの作業に似ています。連鎖は に相当しbind、要素を でラップすることは(私は推測します) に$()似ています。return

したがって、jquery を使用すると、リストの div の束に新しいリスト要素を次のように追加できます。

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

...あなたが持っているかもしれないhaskellで:

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

上記はメモリからのものであり、疑似コードのナンセンスと見なす必要があります。

とにかく、「jQueryはモナドだ」と言うのは大袈裟だと思います。

于 2012-05-08T14:44:50.877 に答える