さて、前回書いた記事の反響が大きかったので、気を良くしているid:qtamakiです。
まず、お詫びなのですが、前回の記事に大きな嘘があります。
前回の記事、そもそもモナドの説明じゃありません。
本当は、「IOモナドのしくみ」の解説でした。テヘ
ボコッ
・・・すまんかった。(´・ω(:;` )
モナドが分かりにくい理由
モナドって、簡単です。aをbに移すだけです。(m a -> m b)
ただ、それだけだと、利用者(プログラマー)処理に関与することができないので、関与する余地を関数として与えます。(ma -> (a -> m b) -> m b)
ただそれだけのことなのです。
だけど、この仕組みが便利すぎて、表現できることが多種多様に存在します。
その中には、解りやすいもの(Meybeとか)もあれば、わかりにくいもの(IOとか)もある。といった感じです。
Javaで言うならば、クラスとかインターフェースという機能は、単純で簡単だけど、Servletとか、DIとか、それであらわすものは、複雑で難易度が高いですよね。
モナドも一緒で、モナド自体は単純な抽象概念(この辺が難しいか)なのですが、それを利用して実現する仕組み(ライブラリ)には、難しいものもある。ということですね。
この辺の難易度の違いをうまく説明せず、いきなりIOモナドの説明をしたりする文章があるから、「モナドは難しい」ってなるんじゃないかな。(おい
それじゃ。