章の最後では、「汎用の高階関数と特有の特殊関数の組み合わせとして部品化することで、たくさんの操作を容易にプログラムできる」「新たなデータ型を定義したときは、それを処理する高階関数を書くべきだ」と結んでいる。リスト編リスト処理の問題を例に説明する。この書き方をするとスタックが溢れるけど、回避方法は色々なところで紹介されているので略。あと、カリー化の話も略。sum.compose(map(sum))ツリー編ラベル付きの順序付きツリーについて考えてみる。置き換える何か」の二つを引数に取る関数だった。置き換えた三つの何かを引数に取る関数になるはずだ。ListNil)インターミッションちょっと力尽きたので、今回はここまで。続きはやる気が湧いたら、ということにさせてください...。論文では、高階関数がプログラムのモジュール化に役立つ理由について「データ型の詳細に関する知識を高階関数の中に局所化できる」と述べているが、これを逆に言うと「特定のビジネスロジックを実装した関数を、それを適用する(データ型の)文脈から切り離せる」ということになる。Future」が述べているような、「本番用の非同期実行の文脈」と「テスト用の同期実行の文脈」を同じコードで切り替えるみたいな仕掛けが実現できるようになる、というわけですね。*1:分かってる人向けの言い方をするなら、モノイドの単位元と二項演算。