[Haskell]例の煽り文句について

モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」

有名な煽りだけども、言葉だけが独り歩きしてる気がする。これ、真剣に悩むようなものではない。だってただのジョークだもの。

この言葉の出典は、『不完全にしておよそ正しくないプログラミング言語小史』(James Iry / 青木靖 訳:原題『A Brief, Incomplete, and Mostly Wrong History of Programming Languages』) というジョーク記事である。

この記事には歴代のプログラミング言語に関する皮肉が書かれている。たとえば Objective-Cについてはこうだ。

1986 – ブラッド・コックスとトム・ラブがObjective-Cを作り、「この言語はCのメモリ安全性とSmalltalkの高速性を合わせたものだ」と宣言する。

そういう流儀でHaskellについてこう書かれている。

副作用の制御に使われるモナドの複雑さのため、Haskellには抵抗を持つ人々がいる。ワドラーは批判を和らげるために、こう語っている。「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」

そう、これはジョークなのだ。Haskellやってる人って難解な数学用語使うよねという皮肉なのだ。ワドラー(Haskell創始者の一人) ご本人が実際にこのような文脈でこの言葉を述べたわけではない。少なくともそのような事実は確認できない。

この言葉の本当の出どころは、『圏論の基礎』(Saunders Mac Lane:原題『Categories for the Working Mathematician』) という圏論の教科書である。


日本語版が手元に無いので以下は筆者による私訳である。

序論で述べたように、形式的にはモナドの定義は集合におけるモノイド M の定義に似ている。(中略) つまるところ、X におけるモナドとは、乗算 × を自己関手の合成で置き換え、単位集合を恒等関手で置き換えた、Xの自己関手の圏におけるモノイドにすぎない。

このように、この言葉は真面目な数学の教科書の中の一文であり、関数型プログラミング言語におけるモナドについての言及ではないし、ましてや人を小馬鹿にしたり けむに巻いたりするような意図の文ではけっしてない。