このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

えっ、僕のエントリーが関係してた? んじゃ …

hirataraさんのエントリー「"圏論とかモナドなんて簡単だからscalaを使って説明してみた"を検証してみた」は読んでました。そこから辿って、もとのエントリー「圏論とかモナドなんて簡単だからscalaを使って説明してみた」もザッと目は通しました。で、特別に何かを言いたくなるような感じはしませんでしたね。

hirataraさんは、過度に批判的にならないように注意深く書いていて:

先ほど「圏とは言い難い」という表現をしたのだけど、これは「関数1つからなる圏も考えられる」という事実を考慮してのことだ。



mapとflatMapが分かれば実用上問題がないというのはその通りで、それ以上圏や関手、モナドについて踏み込んで厳密に理解する必要はないと言える。「圏論とかモナドなんて不要だからscalaにおける要点だけ説明してみた」ってことあれば全く同意である

僕も、scalaのmapとflatMapに対する心理的な障害を取り除くための解説なんだろうな、と思いまして「それはそれでいいんじゃないの」と。

ところが、今日になって「えっ?」と思ったのは、もとのエントリーを書いたrirakkumyaさんのコメント:

ぼくは単に「モナドの事をscala”で"説明」したかっただけなのですが、「圏論とかモナドなんて不要だから〜」というのは論点がずれてないですか? scalaの要点なんて正直どうでも良いです。

僕は(おそらくはhirataraさんも)、「scalaのmapとflatMap」が主題で、「圏論とかモナド」はオマケだと理解してていたのですが、このコメントだとどうも逆なようです。しかも、僕の書いたエントリーへの参照もあったりして。

ウーム。もし、「圏論とかモナド」が主題で、「scalaのmapとflatMap」が説明の手段だとすると、やっぱりちょっと違うかもしれないね。どう違うかは既にhirataraさんが書いているので繰り返しませんが、幾つかの補足を。

hirataraさんの「関数1つからなる圏も考えられる」はそのとおりで、最近書いた「圏と関手をできるだけ簡単に書き下す方法」の「可愛い圏をガンガン使おう」でも強調したように、僕は小粒な圏は重要だと思ってます。対象が2つで、恒等射をいれて射が3本の圏も有用で、この圏からの関手圏(圏の指数)を考えると二重圏の例を作れたりします。codを射影としてファイブレーション(fibred category)になったりもしますね。面白いですよね。

というわけで、事実上「射が1本」の圏も良い例だと思っていますが、これが典型的な圏の事例と誤解されるとマズイかもしれません。これまたhirataraさんが注意しているように、モナドが主題なら、モナドは自己関手をベースに作られる構造*1自己関手圏のモノイド)なので、モナドをホストできる圏を例示したほうがいいでしょう。

モナドをホストするために巨大な圏が必要なわけでもなくて、有限集合の圏の上にベキ集合関手でもモナドになります。順序集合(それを圏とみなす)上の増加的単調写像fで、ff = f を満たすモノもモナドです。特に、小数点以下を切り上げて整数にする操作はモナドです。可愛いモナドは色々あります。

「mapとflatMapが分かれば実用上問題がない」のでしょうが、それとモナドを理解するのは少し別です。

*1:自己関手とは限らない関手からモナド類似物を作る試みは相対モナドとかありますが、それはだいぶ発展的な話題になります。