Является ли jQuery монадой

Я где-то читал, что jQuery является монадой, а этот ответ показывает, что цепочечная функция в библиотеке underscore.js не является монадой (но comonad). И ответьте на это, что похоже, показывает, что это моноид.

Итак, является ли jQuery монадой?

Ответы

Ответ 1

Большинство API не удовлетворяют законам монады. jQuery является большим API, поэтому статистически он вряд ли будет "случайно" монадическим. В результате я скептически отношусь к тому, что API jQuery в целом может удовлетворять законам монады (т.е. Что "jQuery является монадой" ).

Это не означает, что данное (очень ограниченное) подмножество может не удовлетворить их, но API в целом, скорее всего, будет содержать "небезопасные" операции, которые будут нарушать законы при их использовании, нарушая абстракцию.

Поскольку никто, кажется, не представил доказательств того, что API полностью или частично удовлетворяет законам, я предлагаю предположить, что это не так, пока не будут представлены доказательства.

Должно быть показано:

  • какая операция jQuery соответствует return (снятие значения в монаде jQuery)?
  • какая операция jQuery соответствует bind, для склеивания вычислений вместе?
  • как законы левого, правого и ассоциативного поведения сохраняются над этими операциями?

И затем, какие правовые нарушения возможны, учитывая остальную часть jQuery API? Могу ли я, например, сломать bind, вызвав одну из других функций API?

Литература:

Ответ 2

Я думаю, вы имеете в виду неявное поведение цикла jQuery. В этом отношении jQuery похож на работу в монаде списка, где цепочка эквивалентна bind, а обертка элемента в $() сродни return (я думаю).

Итак, где с jquery вы можете добавить новый элемент списка в кучу divs списков с помощью:

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

... в haskell у вас может быть:

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

Вышеизложенное из памяти и должно рассматриваться как псевдокод ерунда.

В любом случае, я думаю, что было бы сказать, что "jQuery - это Монада".