2012-05-08 4 views
31

jQuery는 모나드이고 this answer은 underscore.js 라이브러리의 체인 기능이 모나드가 아니라는 것을 보여줍니다 (하지만 comonad). 그리고 비슷한 answer to this은 그것이 모노로이드임을 보여줍니다.jQuery는 모나드입니다

그래서 jQuery는 모나드입니까?

+0

jQuery를 모르므로 이에 대한 대답이 제한되어 있지만 공통 모나드 구조는 일반적으로 모나 딕 구조를 가짐을 의미합니다. [1] 올바른 방법을 보면 [1] : http : // comonad.com/reader/2011/monads-from-comonads/ –

+6

jQuery API의 핵심에 대한 모나드 법칙을 보여줄 것을 다른 사람에게 요구하고 있습니까? –

답변

31

대부분의 API는 모나드 법을 만족하지 않습니다. jQuery은 큰 API이므로 통계적으로 "우연히"모나드 식일 확률은 낮습니다. 결과적으로 전체적으로 jQuery API가 모나드 법칙 (즉 "jQuery는 모나드")을 충족시킬 수 있다는 것에 회의적입니다.

주어진 (매우 제한적인) 하위 집합이이를 만족시키지 않을 수도 있지만 API 전체가 추상화를 위반하여 사용시 법을 위반하는 "안전하지 않은"조작을 포함 할 가능성이 있습니다.

아무도 API의 전체 또는 일부가 법을 충족한다는 증거를 제시하지 않은 것으로 보이므로 증거가 제공 될 때까지 API가 그렇지 않다고 가정해야합니다.

그것은이 표시되어야

  • jQuery를 동작 (JQuery와 모나드에 값 리프팅)에 대응 return?
  • 어떤 jQuery 연산이 gluing 계산을 위해 bind에 해당합니까?
  • 왼쪽, 오른쪽 및 연관성 법칙은 이러한 연산보다 어떻게 유지됩니까?

그런 다음 jQuery API의 나머지 부분에서 어떤 법률 위반이 가능합니까? 예를 들어 다른 API 함수 중 하나를 호출하여 bind을 깨뜨릴 수 있습니까?

참고 문헌 :

+2

첫 번째 링크 404s. –

11

나는 당신이 jQuery의 암시 루프 동작을 참조하고 생각합니다. 그런 점에서 jQuery는 체인 모방이 bind과 같은 목록 모나드에서 작동하고 $()에 요소를 래핑하는 것이 return과 비슷합니다 (추측). jQuery로 당신이 목록 된 div의 무리에 새 목록 요소를 추가 할 수있는 위치

정도 : 하스켈 ...

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

당신은 할 수 있습니다

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

을 위는 메모리에서 가져와 의사 코드로 간주해야합니다.

어쨌든 "jQuery는 모나드입니다."라고 말하면 스트레칭이 될 것입니다.