次の言葉を最初に言ったのは誰?
モナドはエンドファンクターの範疇にあるモノイドにすぎませんが、何が問題なのですか?
それほど重要ではありませんが、これは本当ですか? もしそうなら、説明をしてもらえますか?
次の言葉を最初に言ったのは誰?
モナドはエンドファンクターの範疇にあるモノイドにすぎませんが、何が問題なのですか?
それほど重要ではありませんが、これは本当ですか? もしそうなら、説明をしてもらえますか?
その特定の言い回しは、James Iry によるもので、彼の非常に面白い「Brief, Incomplete and Mostly Wrong History of Programming Languages」から引用されたもので、彼はそれを Philip Wadler の作だと考えています。
元の引用は、圏論の基本テキストの 1 つである、現役数学者向けのカテゴリのサンダース マクレーンからのものです。これはおそらくコンテキスト内にあります。これは、それが何を意味するのかを正確に学ぶのにおそらく最適な場所です.
でも、刺してみます。元の文は次のとおりです。
全体として、X のモナドは X のエンドファンクターのカテゴリの単なるモノイドであり、積 × はエンドファンクターの合成で置き換えられ、恒等エンドファンクターによって設定された単位です。
Xはカテゴリです。エンドファンクタは、カテゴリからそれ自体へのファンクタです (関数型プログラマに関する限り、通常はすべてs です。これは、ほとんどが 1 つのカテゴリ (型のカテゴリ) だけを扱っているためです。ただし、余談になります)。 しかし、「 XFunctor
上のエンドファンクター」のカテゴリーである別のカテゴリーを想像することができます。これは、オブジェクトがエンドファンクターであり、射が自然な変換であるカテゴリです。
そして、これらのエンドファンクターのうちのいくつかはモナドかもしれません。モナドはどれ?まさに、特定の意味でモノイドであるもの。モナドからモノイドへの正確なマッピングを詳しく説明する代わりに (Mac Lane は私が期待するよりもはるかに優れているため)、それぞれの定義を並べて比較してみましょう。
* -> *
を持つ種類の型コンストラクタ)Functor
join
はHaskellで知られています)return
はHaskellで知られています)。少し目を細めてみると、これらの定義の両方が同じ抽象的な概念のインスタンスであることがわかるかもしれません。
注:いいえ、そうではありません。ある時点で、Dan Piponi 自身からのこの回答に対するコメントがあり、ここでの原因と結果は正反対であり、James Iry の皮肉に応えて記事を書いたと述べています。しかし、おそらく強迫的な整頓によって、削除されたようです。
以下は私の元の答えです。
Iry がFrom Monoids to Monads を読んだ可能性は十分にあります。Dan Piponi ( sigfpe ) が Haskell でモノイドからモナドを導出した投稿で、圏論について多くの議論が行われ、「Hask のエンドファンクターの圏」が明示的に言及されています。いずれにせよ、モナドがエンドファンクターのカテゴリーのモノイドであることが何を意味するのか疑問に思っている人は、この導出を読むと役立つかもしれません。