『プログラミングHaskell第2版』の感想(モナドとかわかりたい者の)

やっぱりモナドわすれるな(わかっていない?)と思って、時間ができたのでReal World Haskell読もうかなあ。

と思いつつ、

積ん読のこちらを思い出し、『プログラミングHaskell第2版』Graham Hutton 著、山本和彦 訳を読む。

Functor、Applicativeからの流れのあとのMonadの説明がわかりやすい。というか簡潔で、この導入がいいんじゃないかと。Real World Haskellは違った導入だった気がする。

しかし、以下のブログを読んでしまった。

具体的には、関手(ファンクター)→アプリカティブ→モナドという解説の流れは、この本が作り出しました。 この説明の流れは、「同じパターンで定義できる関数」をHaskellでどのようにまとめるかについて、『Real World Haskell』のころには知られていなかった知見を反映したものです。

golden-lucky.hatenablog.com

なんと『すごいHaskellたのしく学ぼう!』でもその流れの説明だったとか。既読だったんですよ、数年前にね(w)

RWH読み返している場合じゃなかった。

要点は、あいまいに以下記載する。

Functorはコンテナみたいなデータ構造(IOも)の中身に関する純粋関数適用。

Applicativeはその一般化で、複数引数OKに一般化する。ここで作用とかでてきて、作用は引数だけが対象。なんだか書いててよくわからない。引数を適用していく過程に作用がある。あくまで適用できるのは純粋関数適用(作用なしの関数の適用)。pureなんかそれかな。

Monadは純粋関数でなく作用のある関数の適用に拡張されている。純粋関数だけじゃなくて。a->Maybe bみたいな関数のフレームワークなんだよ。いきなりフレームワークってなんだよ?ってところだが、計算戦略みたいなものだろうか。適用なのかもしれない。bindでつないだりすることかな。Applicativeだって<*>ってつなぐアレ。

TreeのカウントアップしたLeafをつくっていうのはStateモナドを使用して、あーなるほど、と思うんだよ。これってYesodでHTML構成するときの記法だやな、これだったのかな、Stateモナド(かReaderか Writer)みたいなデータを引き回しているんだろうな、きっと。

そういえばStateモナドの図はこの本がわかりやすいべ。