bonotakeの日記

ソフトウェア工学系研究者 → AIエンジニア → スクラムマスター・アジャイルコーチ

JQueryがモナドかどうかとか

jQuery is a Monad | Important Shock (via jQueryはモナドだ - id:anatooのブログ) を読んでのつぶやき。適当にskimしてます。

  • あれ、モナド則ってこんなんだったっけ?? posted at 12:12:46
  • って、Haskellモナド則と違うものを説明してるのか。孔明の罠だ posted at 12:18:31
  • @ckuwata 1個目は関手の存在、2個目、3個目は付随する自然変換の存在について言ってる、みたいで、確かにこれがきちんと言えればモナドにはなる。でも、きちんと言えてるのかかなりアヤシイ。 posted at 12:24:37
  • ああ、でも意味が通じてきた、ような気がする。とりあえず言いたいことはわかってきた。俺jQueryようしらんけど posted at 12:27:27
  • とりあえず、原文の方のこの人の意見にほぼ同意 → 13. Michael | January 19, 2009 at 2:02 am posted at 12:53:38
  • Haskellでいうモナド則(unitの単位律、joinの結合律)が成り立つかについてちゃんと言ってないので、これだけで「jQueryモナド」とは言えないと思います。まぁ文字列処理なので、言えそうな気もしなくもないけど、僕はjQuery知らんのでこれ以上はわかりまへん。 posted at 12:55:57
  • @hiratara あのブログは考察が不十分ですが、真面目に考えればちゃんとなってる可能性は十分ありますよ。 posted at 13:34:08

僕的結論は一言でまとめると「真面目に考えればjQueryモナドになってるかもしれないけど、この説明でモナドになってるとはとても言えない」です。

上でも書いてる、原文の方の13番のコメント(Michaelさん)が非常に正しい指摘をしてますんで、意訳しときますね。ほぼ同じこと言ってるんだけど。

うーん… これ、いわゆる3つのモナド則じゃないよね。ココに書かれてるのはモナドの構造のこと、それもHaskellに特化したもので、圏論的な構造じゃない。抽象的に書けば、モナドは関手に2つの変換 unit と join が付随したもの(Haskell の bind はこれらから導出できる)だし、更に 左単位則、右単位則、結合則の3つの法則を満たすたものでなければならない。

この記事で何をやりたかったかはわかるんだけど、でもうまく行ってないね。もし何かをモナドと呼ぶときはもっと厳密かつ正確に話を進める必要があるし、そうでなければ、ただ大雑把な比較をしてみたってだけにしかならないよ。

Haskellに特化した〜」は、別にそういうスタイルでもちゃんとした定義は可能なので、そんなには問題ないのです。ただやっぱり、3つのモナド則が成り立ってることがちゃんと示されてないのが問題かと。


あと、訳者のid:anatooさんはtwitter「bindにきちんと対応する操作は言及されてないし実際無い」とつぶやいておられますが、僕が思うに、bindはメソッドチェイン(のドット)が対応してるって考えればいい…というか、元のブログ主のやりたかったことはそれ、という気がします。ただしこの場合、問題はreturnの方じゃないかと。
最初はこんな風にコメントしたんですが、$() ってメソッドチェインの途中や終わりにおけるんですかね?
これが書けないと、$() は returnの代わりとしては片手落ちだし、なので別のものを return としてあてがわないといけなくなりそう、でもそんなものあります?という感じです。

注:bonotakeは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。