読んだ感想とか :: Haskell入門 関数型プログラミング言語の基礎と実践

画像1

2年くらい前に買ってずっと放置していたのですが、最近ようやく読了したので軽く感想とかを書きたいと思います。

一言でいうなら

すでに他の Haskell 本(『すごい Haskell たのしく学ぼう!』とか)で入門を終えている人が、2冊目以降として実践的な内容を学ぶのに適した日本語の Haskell 本として貴重な一冊だという印象です。

砕けて言えば、Haskell 入門を終えて「より実践的なステップに進むにはどうしたら良いだろう・・・」と思っている人に是非とも読んで欲しい書籍だと思いました。

章構成

本書の章構成を目次から引用します。

第1章 はじめてのHaskell
第2章 基本の文法
第3章 型・型クラス
第4章 I/O処理
第5章 モナド
第6章 関数型プログラミング
第7章 ライブラリ
第8章 並列・並行プログラミング
第9章 コマンドラインツールの作成
第10章 Webアプリケーションの作成
第11章 サーバとクライアントの連携

他の入門書に比べ、より実践よりに書かれているのが目次からでも推測できるかと思います。

入門書としては適さない

さて、厳しいことだけ最初に書いてしまうと、タイトルに「入門」という言葉が含まれているにも関わらず、この本は「これから Haskell を学びたい!」という人が1冊目に読むのには適さないと思っています。

たしかに第1章から第5章までかけて、Haskell の基本的な文法や概念、Haskell でコードを書く上で避けて通れないモナドなどの解説がされてはいるのですが、全体的にトップダウン的な説明が多いため、初学者が読み進めるのは非常に厳しい印象でした。

Amazon のレビューからもそのことが垣間見えています。

説明が不足している箇所は、脚注で「○○については✗✗で説明します。」という案内はされているのですが、その量があまりにも多いため初学者はパンクしてしまい、結局のところ知識をうまいこと積み上げられないという印象があります。

Haskell 風に言えば、読者の頭に(未消化の理解という)サンクが溜まりすぎてスペースリークを起こしてしまう印象です(Haskell 知っている人にしか分からないジョークですみません)。

私自身もあえてトップダウン的なアプローチの Haskell 入門記事を書いているくらいですし、トップダウン的なアプローチが必ずしも悪いとは思っていません。

そして、私も執筆経験があるわけで、著者陣の狙いというか想いはすごく伝わってくるのですが、残念ながら入門書としては厳しい仕上がりになってしまっている、というのが正直な感想です。

ちなみにこれは余談ですが、本のタイトルの決定権は出版社にあるため、書籍の内容を的確に表すことよりも、売れることが優先されてタイトルを付けられてしまうことも多いという事情もあり、タイトルと内容のミスマッチによって低評価がされてしまうことがあるのは悲しい事実です。

実践的なトピック

さて、ここからは褒めていきます

本書の特徴はなんと言っても、実践的な内容について多く書かれていることです。

5章の「モナド」では他の入門書にはまず書かれていないであろう『モナド変換子』について書かれていますし、7章「ライブラリ」ではよく利用される標準ライブラリに加えて、JSON、パーサ、Lens、などの代表的な外部ライブラリについても解説されています。

そして、8章の「並列・並行プログラミング」では、並行性や非同期処理・STM(ソフトウェア・トランザクション・メモリ)など、Haskell 入門書ではまず取り上げられないようなトピックまで触れられています。

そして、9章から11章にかけてそれぞれ異なったテーマでサンプルアプリケーションを開発していく内容になっているのですが・・・これが本当に素晴らしい内容でした。

9章では CLI ツール、10章では Webアプリケーション、11章ではサーバ・クライアントアプリとテーマが別れており、それぞれこれまで学んできたことの応用を実際のコードを交えながら学習できる内容になっており、「実際に Haskell でどうやってアプリ作ったらいいのよ?」という初心者の疑問に見事に答える内容になっていると感じました。

初心者から中級者への道

多くの人は「すごい Haskell たのしく学ぼう!」などの書籍で Haskell を学ぶと思うのですが、そこから Haskell で何かツールとかを作りたいと思っても、どこから手をつけて良いかわからないという問題に遭遇すると思っています。

Haskell-jp や Qiita の Haskell 記事を読むのも一つの手ではありますが、わりと専門的なトピックが多く、初心者が中級者を目指す際のには結構厳しい印象もあります(少なくとも私には厳しいです)。

そうなると、今度は何か OSS のコードでも読んで学習するか、と思ったりするわけですが、そもそもコードリーディングに適した題材自体もよくわからないわけで、これもやっぱりうんざりしちゃうわけです。

そんな中、本書の実践的なサンプルアプリケーションの開発というのは、初心者にとって刺激的で、かつ次のステップに進むための貴重な足がかりになると感じました(たぶん著者陣の狙いはそこにあるんじゃないかと私は思っております)。

深い見識のある著者陣による解説

最初に「入門書には適さない」ときっぱり書きましたが、一方で2冊目以降の人はあらためて復習するのに非常に適した内容だと感じています。

Haskell に限った話ではありませんが、技術書における解説は著者による色がそこそこ出るため、その色が読者に合うか合わないかによって、わりと評価が分かれることも多いと思っています。そのため、ある書籍での解説を読んでも全然分からなかった内容が、他の書籍を読んだらすんなり分かる、というのはよくある話です。

そんな中、本書は深い見識のある著者陣によって、非常に細かな補足説明が脚注やコラムで書かれており、他の書籍でふんわりと理解していた内容について、より深い理解ができるようになると感じました。

自分で調べられる人向けの本

とはいえ、残念ながら説明が不足している感のある箇所もそれなりに多くあったように感じます。本書だけで物語が完結するかと言うと、ちょっと難しいかもしれない、という感じです。

そのため、本書は分からなかったことを自分で調べることが出来る人のための書籍なんだろう、と私の中で納得しました。

こうやって書くと微妙なふうに聞こえてしまうかもしれませんが、知識の入り口として機能するだけでも十二分に価値があると私は思っています(知らないこと知れない、わけです)。

ちなみに、本書が発売されたのはおよそ3年前なので、9章・10章・11章のサンプルコードは DL してもビルドできない状態になっていました。リポジトリをフォークして、最新の Mac / Stack でビルドできる状態にしたものを用意したので、必要な方はご参考ください。

初心者がステップアップするための貴重な一冊

ここまででだいたい伝えたことは書けたと思うので、最後にまとめたいと思います。

・2冊目以降に読むのに適した Haskell 本
・より実践的なトピックに進みたい人向け
・自分で調べることが出来るなら買って損なし!

最初に厳しいことを書いてしまいましたが、とにかく他の入門書で Haskell を学んだ人が2冊目以降に読むのに非常にオススメな本です。とくに「Haskell で実際になにか作ってみたい」指向の人にバッチリ刺さる内容かと思います。

このような書籍は、少なくとも日本語における Haskell 本だとこれ1冊しか無い印象があり、この本を執筆・販売してくださった著者陣・出版社の方にこの場を借りてお礼を申し上げたいと思います。

ちなみに、2冊目の別の候補としては『Programming Haskell 2nd edition』もオススメです。

こちらは実践というよりは「より深く理解する」という方面に重きがおかれているような印象があります。『すごい Haskell たのしく学ぼう!』と並んで入門書として見られることも多いですが、私個人としては2冊目以降に読んで理解を深めるのに役立つ印象があります(1冊目だと難しいと感じます)。

おわりに

Haskell はいいぞ!

役に立った記事などありましたらサポート頂けると嬉しいです。