すごいhaskellたのしく学ぼう!の9章までを紹介しました。引き続き10-15章を紹介します。最短経路問題は遅延評価が生きてくる問題です。ApplicativeFunctorを扱います。Monoidを扱います。(二項演算)が定義されている何かのことです。Monoid則に沿っている必要があります。畳み込みを行うときです。モナド則13章ではついにMonadが登場します。MonadはApplicativeFunctorの強化版です。失敗する可能性のある計算同士を組み合わせ可能にする仕組みです。ピエールがロープから落ちないようにバランスを取るプログラムを通じてMaybeの練習をします。IOアクションを繋ぎ合わせることができます。doブロック内は手続き型言語のようなスタイルになります。routineマス目を移動する騎士の移動プログラムです。stateモナドを扱います。先ほどの騎士の移動プログラムで登場したin3を一般化したinMany関数を作ります。例として上記モナドは下記の文脈を持ちます。余分な別の値を一直線で合成します。参照できる環境を共有します。状態の変更を引き継ぎます。STMモナドなどがあります。読んでくれてありがとう!最終章である15章ではデータ構造の要素の扱いを簡単にできます。ある注目点をデータ構造によって上下させるzipperを扱います。zipperの名前の由来はズボンのジップに動作が似ているためです。木構造をzipperで移動してみます。newFocus本にちりばめられたジョークが面白かったです。日本語訳も良かったと思います。今度はバランス棒にとまっている鳥の数によらずに、いきなりピエールを滑らせて落っことす関数を作ってみましょう。bananaはおかまいなしにNothingを返すので、以降のすべての結果はNothingになってしまいます。Maybeモナドを使うと失敗するかもしれない処理が連続するコードをとても簡潔に書けるのです。filterはhaskellプログラミングの米といっても過言ではないでしょう。命令型/手続き型プログラミング脳から関数型/宣言型プログラミング脳への頭の切り替えがまだまだ足りないと感じた。CodeはGiHubにあります。Elmastudio。