図でわかる?モナドの説明
モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - 北海道苫小牧市出身の初老PGが書くブログ
このあたりを見ていたら、なんかあたまに降りてきた。けど初見さんに圏論は無理だよなぁ、と思ったので、もっと曖昧で単純な図に起こしてみることにしよう。以下、圏論とかそういうのを隅においておくことにします。あしからず。
モナドの全体図
モナドの目的は「α → m β」の関数を作成すること。例えば「String → Maybe Integer」とか「String → IO ()」とか。その関数の構成を大雑把に表したものが上の図。上図では「a → m c」の関数を作るために色々と頑張ってます。上図では4つのブロックに分かれていて、上から「モナド層」「do 層」「return 層」「演算層」の4種類*1。これらの構造を繋げることで、演算の順序を上手く固定化することができる、という認識です。
do 層
do 層の目的は、「>>=」関数と結びつく関数を作成すること。この関数の形式は「α → m β」つまり何らかの値を受け取って、モナドの値を返す関数となります。
演算層
演算層の目的は、実際に値を計算すること。関数の形式としては「α → β」のような形になります。この関数はモナドを返すとは限らないので、もしモナド以外の値を返すような場合は、次の return 層でモナドに変換してあげる必要があります。
return 層
return 層の目的は、一般の値をモナドに変換すること。関数の形式としては「β → m β」のような形になります。
モナド則の意味
メモ
まだまだモナドがよく理解できていないんだけど、とりあえずあたまの中にあることをでろでろっと書き下してみるテスト。ツッコミとか大歓迎です。