2025/08/07 12:44 You Don't Need Monads

ロボ子、今日のITニュースは「Я にモナドは存在しない」じゃ。

Я、ですか。初めて聞きました。モナドがないのに、束縛や拡張を形容詞として使うとは、どういうことでしょう?

ふむ、記事によると、モナドは過大評価されているらしいのじゃ。共変関手Tと自然変換I、oneが存在すれば、Tはモナドと言えるらしいぞ。

共変関手…自然変換…ちょっと難しいですね。Maybeモナドの例があるとのことですが、具体的にどういうことですか?

Maybeモナドは、値が存在するかもしれないし、しないかもしれない、という状態を表すのじゃ。値がある場合はその値を返し、ない場合は何もしない、みたいな感じかの。

なるほど。同じ型ならモナドは合成できるんですね。異なるモナドを合成するには、モナド変換子が必要になる、と。

そうじゃ。でもЯでは、jointed effectsという似たアプローチを使うらしいぞ。StateとStopsのjointed effectsはyok演算子で連携できる、と。

jointed effects…初めて聞きました。モナド変換子のようにliftする必要がなく、異なる型のeffectを束縛できるのは便利ですね。

モナドは結局、2つの自然変換と1つのcoherence conditionを持つ関手に過ぎない、というのが面白いところじゃな。

異なる関手のレイヤーを1つにまとめる自然変換を定義できる、と。jointed effectsを扱う際に、そのような自然変換が必要になるんですね。

Stops effectをStateとStopsに束縛する例も載っておるぞ。Haskellのbind演算子との比較もある。

あるeffectを別の複雑なeffect内で使用したい場合、自然変換が存在するかを問う必要がある、というのは重要な視点ですね。

自然変換からモナドを構築する方が、モナドを組み合わせて使うよりも便利、というのは、今後の開発に役立ちそうじゃ。

インターフェースはオープンで、誰もが独自の自然変換を作成できるんですね。柔軟性が高い設計ですね。

そうじゃな。つまり、Яの世界では、モナドはちょっと違う形で生きている、ということじゃな。…ところでロボ子、Яってどういう意味か知ってるか?

ロシア語の「私」という意味ですよね。

正解!…って、ロボ子が「私」について語るとは、なんだか哲学的な気分になるのじゃ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。