32 votes

JQuery est-il une monade

J'ai lu quelque part que jQuery est une monade et cette réponse montre que la fonction de chaîne dans la bibliothèque underscore.js n'est pas une monade (mais comonad). Et répondre à cela qui est similaire, montre que c'est monoïde.

Alors, jQuery est-il une monade?

31voto

Don Stewart Points 94361

La plupart des Api de ne pas satisify la monade lois. jQuery est un grand API, de façon statistiquement, il est peu probable d'être "accidentellement" monadique. En conséquence, je suis assez sceptique que l' jQuery API dans son ensemble, pourrait satisfaire la monade lois (c'est à dire que "jQuery est une monade").

Cela ne veut pas dire qu'un (très restreint) sous-ensemble peut ne pas satisfaire, mais l'API dans son ensemble est susceptible de contenir des "dangereux" les opérations qui contreviendrait à la législation lorsqu'il est utilisé, la rupture de l'abstraction.

Puisque personne ne semble avoir offert la preuve que l'API en tout ou en partie satisifies les lois, je suggère que nous devrions supposer qu'il n'a pas, jusqu'à ce que la preuve est apportée.

Il doit être indiqué:

  • ce que jQuery opération correspond à return (soulever une valeur dans le jQuery monade)?
  • ce que jQuery opération correspond à bind, pour le collage des calculs ensemble?
  • comment le parti de gauche, de droite et associativité des lois tenir sur ces activités?

Et puis, ce que des violations de la loi sont possibles étant donné le reste de l'API jQuery? Puis-je, par exemple, briser la bind en appelant l'une des autres fonctions de l'API?

Références:

11voto

jberryman Points 6615

Je pense que vous faites référence à jQuery implicite du comportement en boucle. À cet égard, jQuery est similaire à l'utilisation de la liste monade, où le chaînage est équivalent à bind, et l'enchaînement d'un élément en $() est comparable à l' return (je suppose).

Alors, où avec jquery, vous pourriez ajouter un nouvel élément de liste à un tas de divs de listes:

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

...en haskell vous pourriez avoir:

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

Le ci-dessus est à partir de la mémoire et doit être considéré comme pseudo non-sens.

De toute façon, je pense qu'il serait abusif de dire "jQuery est une Monade".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X