2012-05-08 26 views
31

Leí en alguna parte que jQuery es una mónada y this answer muestra que la función de cadena en la biblioteca underscore.js no es una mónada (sino comonad). Y answer to this que es similar, muestra que es monoide.Es jQuery una mónada

Entonces, ¿jQuery es una mónada?

+0

No conozco jQuery, así que tengo una capacidad limitada para responder a esto, pero las cosas [tener una estructura co-monadic generalmente implica también tener una estructura monádica] [1] si las miras de la manera correcta [1]: http : // comonad.com/reader/2011/monads-from-comonads/ –

+6

¿Le está pidiendo a alguien que demuestre que las leyes de mónadas son válidas para el núcleo de la API de jQuery? –

Respuesta

31

La mayoría de las API no satisfacen las leyes de mónadas. jQuery es un gran API, por lo que estadísticamente, es poco probable que sea "accidentalmente" monádico. Como resultado, soy bastante escéptico de que la API jQuery en su conjunto pueda satisfacer las leyes de mónadas (es decir, que "jQuery es una mónada").

Esto no significa que un subconjunto dado (muy restringido) pueda no satisfacerlos, pero es probable que la API contenga operaciones "inseguras" que violarían las leyes cuando se usen, rompiendo la abstracción.

Dado que nadie parece haber ofrecido evidencia de que la API en su totalidad o en parte satisface las leyes, sugiero que supongamos que no, hasta que se proporcione evidencia.

debe demostrarse:

  • qué operación jQuery corresponde a return (levantamiento de un valor en el jQuery mónada)?
  • ¿qué operación de jQuery corresponde a bind, para pegar cálculos juntos?
  • ¿Cómo se mantienen las leyes de izquierda, derecha y asociatividad sobre esas operaciones?

Y entonces, ¿qué violaciones a la ley son posibles dado el resto de la API de jQuery? ¿Puedo, por ejemplo, romper el bind llamando a una de las otras funciones de la API?

Referencias:

+2

El primer enlace 404s. –

11

creo que usted se refiere al comportamiento de bucle implícito de jQuery. En ese sentido, jQuery es similar a trabajar en la lista de mónadas, donde el encadenamiento es equivalente a bind, y envolver un elemento en $() es similar a return (supongo).

Entonces, ¿dónde con jQuery es posible añadir un nuevo elemento de lista a un puñado de divs de listas con:

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

... en Haskell es posible que tenga:

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

Lo anterior es de la memoria y debe considerarse un sinsentido de pseudocódigo.

De todos modos, creo que sería exagerado decir "jQuery es una mónada".

Cuestiones relacionadas