読者です 読者をやめる 読者になる 読者になる

セカイノカタチ

世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。最近はカメラの話題も多め

マーブルワーズ

モナドを理解しにくい理由2

Haskell

さて、前回書いた記事の反響が大きかったので、気を良くしているid:qtamakiです。

まず、お詫びなのですが、前回の記事に大きな嘘があります。




前回の記事、そもそもモナドの説明じゃありません。






本当は、「IOモナドのしくみ」の解説でした。テヘ


ボコッ



・・・すまんかった。(´・ω(:;` )



モナドが分かりにくい理由

モナドって、簡単です。aをbに移すだけです。(m a -> m b)
ただ、それだけだと、利用者(プログラマー)処理に関与することができないので、関与する余地を関数として与えます。(ma -> (a -> m b) -> m b)
ただそれだけのことなのです。

だけど、この仕組みが便利すぎて、表現できることが多種多様に存在します。

その中には、解りやすいもの(Meybeとか)もあれば、わかりにくいもの(IOとか)もある。といった感じです。

Javaで言うならば、クラスとかインターフェースという機能は、単純で簡単だけど、Servletとか、DIとか、それであらわすものは、複雑で難易度が高いですよね。

モナドも一緒で、モナド自体は単純な抽象概念(この辺が難しいか)なのですが、それを利用して実現する仕組み(ライブラリ)には、難しいものもある。ということですね。

この辺の難易度の違いをうまく説明せず、いきなりIOモナドの説明をしたりする文章があるから、「モナドは難しい」ってなるんじゃないかな。(おい

それじゃ。