2012-05-08 4 views
31

J'ai lu quelque part que jQuery est une monade et this answer montre que la fonction de chaîne dans la bibliothèque underscore.js n'est pas une monade (mais comonad). Et answer to this qui est similaire, montre que c'est monoïde.Est jQuery une monade

Alors, est-ce que jQuery est une monade?

+0

Je ne sais pas jQuery, donc avoir une capacité limitée pour répondre à cette question mais les choses [ayant une structure monadique implique généralement aussi avoir une structure monadique] [1] si vous les regardez de la bonne façon [1]: http : // comonad.com/reader/2011/monads-from-comonads/ –

+6

Demandez-vous à quelqu'un de montrer que les lois de la monade sont valables pour le cœur de l'API jQuery? –

Répondre

31

La plupart des API ne satisfont pas les lois de la monade. jQuery est un grand API, donc statistiquement, il est peu probable qu'il soit "accidentellement" monadique. En conséquence, je suis assez sceptique que l'API jQuery dans son ensemble pourrait satisfaire aux lois de la monade (c'est-à-dire que "jQuery est une monade"). Cela ne veut pas dire qu'un sous-ensemble donné (très restreint) pourrait ne pas les satisfaire, mais l'API dans son ensemble est susceptible de contenir des opérations "dangereuses" qui violeraient les lois en cas d'utilisation, rompant l'abstraction.

Puisque personne ne semble avoir offert la preuve que l'API, en totalité ou en partie, satisfait aux lois, je suggère que nous supposions que non, jusqu'à ce que des preuves soient fournies.

Il faut démontrer:

  • quelle opération jQuery correspond à return (soulever une valeur dans la monade jQuery)?
  • quelle opération jQuery correspond à bind, pour le collage de calculs?
  • comment les lois de gauche, de droite et d'associativité conservent-elles ces opérations?

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

Références:

+2

Le premier lien 404s. –

11

Je pense que vous faites référence à un comportement de mise en boucle implicite de jQuery. À cet égard, jQuery est similaire à travailler dans la liste monad, où le chaînage est équivalent à bind, et l'emballage d'un élément dans $() s'apparente à return (je suppose).

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

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

... à haskell vous pourriez avoir:

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

Ce qui précède est de la mémoire et devrait être considéré comme un non-sens pseudocode.

De toute façon, je pense qu'il serait exagéré de dire "jQuery is a Monad".

Questions connexes