Help us understand the problem. What is going on with this article?

これから Haskell を学ぶ人のための書籍紹介

Haskell 書籍紹介

最近、Haskell 関連の書籍ってだいぶ増えましたよね。

僕が最初に Haskell に出会った頃は ふつうの Haskell プログラミング, プログラミング Haskell, Real World Haskell ぐらいしか日本語で読める書籍は無かったように思います。

そこで!僕が持っている Haskell 関連の書籍コレクションを紹介していこうと思います!!!(コレクションに含まれていない書籍はここに載っていません。そのため全てのHaskell書籍を網羅するものではありません)

僕自身まだ読めていないものもありますが、これからどの本を読もうか悩んでいる人に対して少しでも参考になればと思います。

test.png

Thinking with Types

Screen Shot 2020-01-13 at 13.05.09.png

Haskell 中級者向けの型レベルプログラミングに特化した書籍です。(物理書籍はありません)

書籍の難易度としては「Haskell入門」「入門Haskellプログラミング」「プログラミングHaskell (2nd)」のどれか1冊を読み終えたレベルであれば最後まで読める気がします。「すごいH本」だけを読んだという人だと挫折するかもしれません。

この書籍は型レベルプログラミングに関する知識が無くても読み進めることができます。本書を読み進めることで、型とカインドの関係とともに GADTs, 制約, ランクN型, 存在型, 型族, データ族, 型レベルリスト, Type Application, カスタム型エラー, Generics, 拡張可能レコード, Indexed Monad, Dependent Type (singleton) といった内容について学習することができます。

全て比較的簡単な例から始まるため、途中で道に迷うことも無いです。各章には、答え付きの簡単な練習問題がいくつか用意されているため、自分が理解しているかどうかチェックしながら先に進むことができます。

最後まで通読することで型レベルプログラミングを使ったコードを読み書きできるようになるでしょう。

Haskell による、このような内容の書籍は今まで存在しなかったため、型レベルプログラミングについて勉強してみたいと思っている方にオススメできる一冊です。

Practical Haskell

まだ読んでいる途中です。

GET PROGRAMMING WITH HASKELL

全600ページなので後述するRWHと同じぐらい分厚いです。ただ各章 (Unit) はそれほど分量があるわけではないので、毎日コツコツ進めれば2ヶ月ぐらいで読み終わることができます。

プロジェクト管理ツール stack の使い方や良く使うパッケージ (text, bytestring, aeson, http-conduit) の解説が丁寧に書かれているため最後まで読めば、かなりHaskellを実用的に使えるようになる一冊だと思います。

特に他の手続き型言語や、オブジェクト指向言語に慣れている人にとっては、身近な例が多いため、ちゃんと学びたい人は最初の1冊目でも良いと思います。今までのアカデミックな雰囲気のHaskellに抵抗がある人にオススメできます。

本書の面白い点として $. の解説はほとんど行いません。たぶん実用的には無くても困らないからだと思います。

最近の書籍では Semigroup, Monoid, Functor, Applicative, Monad 型クラスについて必ず言及されるようになってきています。本書では Semigroup, Monoid の説明がわかりやすくて、誰かに教える際には、僕も同じ例を使ってみようと思います。

また、他の書籍では見られない特徴としては Maybe の重要性について、しっかりと具体例を交えて説明している点です。本書全体を通して Maybe 型がなぜ重要なのか理解できることでしょう。

個人的に面白いと思った章です。

  • Lesson17: Design by composition-Semigroups and Monoids
  • Lesson22: Interacting with the command line and lazy I/O
  • Lesson23: Working with text and Unicode
  • Lesson42: Efficient, stateful arrays in Haskell

モナド変換子や lens についての解説は特にありません。また、各単元に練習問題がいくつかついていますが、簡単なのであまり面白く無いかもしれません。

量は多いですが、情報はしっかりと体系的にまとまっているため、入門書としてオススメしても良いのではないかと思います。

最近、日本語版も出版されました。(僕はまだ読めていません)

プログラミング Haskell

p2.jpg

僕のおすすめ入門書です。周りに Haskell に詳しい人がいる場合はこの本で入門しましょう。(haskell-jp で質問しても良いと思います。)

関数型言語に慣れてない人が完全に独学でやろうとすると、挫折しそうな本でもあるので、そういう人は後述の すごいHaskellたのしく学ぼう を読んでから本書に取り組むと良いと思います。

日本語の訳本も非常にクオリティが高く、僕は少なくとも3周ぐらい読みました。面白いことに1周目では解けなかった問題 (ほとんど良くわかんなくて飛ばしてました・・・) が2周目ではある程度わかるようになり、3周目以降では今まで見えていなかった視点に気づくことができます。

ただ、原著の書籍構成には問題点もあり、自分で補完しなければならない部分も多々ありました (それも含めて力がつく本ではあるのですが)。2nd Edition ではその辺りの構成がアップデートされ、個人的には非常に満足のいく内容になりました。

時間のある学生などが 2nd Edition を読む場合、まずはちゃんと Part1 を読みましょう。問題を解きながら 2~3周すれば Haskell の良い書き方が身につきます。(Prelude で定義されている関数の型と実装と具体例をそらで書けるかどうかが Part2 に進むべきかどうかの一つの判断になると思います)

すごい Haskell 楽しく学ぼう!

2.jpg

通称: すごいH本

素晴らしい本です。プログラミング Haskell 同様に日本語訳も素晴らしく、独学で学ぶ人はまずはこの本を読みましょう。挿絵もたくさんあって楽しいです。

また、英語バージョンは無料という点も嬉しいところです。
※ すごいH本のWeb版は書籍版からところどころ端折られている箇所があるのでご注意ください。

練習問題が無いため、この本を1冊読むだけでは Haskell 力は思ったより身につきませんが、Haskell の雰囲気に慣れることが重要ですし、何かあった時に本書を読み返すことで深い理解が得られます。

関数プログラミング 珠玉のアルゴリズムデザイン

p1.jpg

原著のカバーデザインがオシャレなのでかなり好きです。

Richard Bird 大先生の魔法の本です。文字列探索アルゴリズムや数独など、現実的な問題に対して、関数型言語ではどのようなアルゴリズムを設計すれば良いか?というトピックスが30詰まっています。

もともとは Functional pearls という読み物があり、そこからピックアップしたようです。現在も続いています。

各章はだいたい10ページにも満たないのですが、自分で証明を補ったり行間を読むとめちゃめちゃ深いです。魔法のような融合変換の実例を見ることができますし、Haskell で問題を解く際の良い参考になります。

すごく難しいですが、すごく楽しいです。Haskell は書けるけど手続き的なアルゴリズムしか思い浮かばない!という方におすすめです。

続編とか出て欲しい1冊です。

関数プログラミングの楽しみ

p.jpg

題名通り楽しい。内容は幅広く多岐に渡り、各章の内容がとても重い。練習問題が豊富に用意されているという点も本書の特徴の1つ。Haskell 関連の論文を読める人なら凄く楽しめる内容になっています。

どの章も面白いのですが、僕が好きなのは 3章のおりがみプログラミング, 7章の関数画像, 10章のアローと計算, 12章のファントム型を楽しむ です。

まぁまぁ古い本ですが、今も楽しめる内容だと思います。

Haskell による並列・並行プログラミング

p.jpg

通称: ヘイヘイHaskell

今は Facebook にいる Haskell 界の有名人 Simon Marlow さんの並列・並行本です。

残念ながら僕は2章で読むのやめてしまったので、レビューする立場にないですが、Haskell の強みの1つでも並列・並行プログラミングをちゃんと学びたい方には本書がおすすめです。

僕も読みます・・・。

関数プログラミング実践入門

p.jpg

本書は 関数プログラミング とありますが、業務で Haskell 以外の言語を使っている人が Haskell を学ぶための入門書です。なので、正直なところ Haskell の楽しさは伝わってきませんでした (たぶん、すでに別の Haskell 本を読んでいたという影響もあります)。

しかし、業務で Haskell を利用する際のベストプラクティスが詰まっているため、本書を参照することは少なくありません。

また、本書の素晴らしいところは用語が正確で適切に記述・説明されている点です。それだけで本書を購入する意味は十分にあります。特に 4章の評価戦略, 5章のモナド, 6章のオススメの開発/設計テクニック は素晴らしい内容だと思います。

Haskell 入門

p.jpg

まず、タイトル詐欺であるという点は明確に指摘しておきます。(Haskell による実践的アプリケーション開発入門 の省略形だと思えば良いかも)

その代わり、本書はかなり実践的な攻めた内容になっており実際の業務でも頻繁に使うであろう JSON データの取り扱い方やファイル処理など、書籍の表紙通りの アプリケーション開発 に重点をおいた内容となっています。

書籍内のコードは全て動作するものとなっており、対話的に実行することで手を動かしながら Haskell を理解するという点では非常に良いと思います。

また、0からアプリケーションを開発する場合、基本的には モナドトランスフォーマー のような仕組みを使わなければならないため、その辺りの話が実例とともに載っているというのは珍しく、それだけでも本書を読む価値はあります。

特に、Haskell でアプリケーションを開発する際の問題として、既存のどのパッケージを利用したら良いか?という点がありますが、本書の7章を読むことでその辺りの知見を一気に得ることができます。

本書はアプリケーションを開発する際には手元に置いておきたい1冊です。僕もたまに読んでフムフムしています。

Real World Haskell

p.jpg

原著は無料で読めます。凄く分厚いのでこれを通しで読み切った人はかなりのツワモノだと思います・・・。(僕は全然読んでません。たまに参照する程度です。)

2008年にこれだけの内容をよく Haskell でやれたなー。すごいな!!っていう感想しかありません。

本書ではバーコード認識の話やウェブクライアントプログラミングなどを題材として、アドバンスドなトピックスを網羅的に扱っています。内容は確かに古いのですが、得られるものはたくさんあります。

FFI, プロファイリング, チューニング などはアプリケーションを実際に開発しているからこそ得られる知見でもあるので、その辺りの話が載っているという点で、本書を読んでみるのも面白いかもしれません。

Haskell を学ぶために全員が読む本というよりは、業務レベルの Haskell でアプリケーション開発のために、誰か一人が読んでおく本という感じじゃないでしょうか。

関数プログラミング

p.jpg

1st Edition は全く読んで無いです。すぐに飽きました。

2nd Edition は知っていることが多かったので全然読んでません。

実践的に使える内容はあまり無いですが、証明の仕方や融合則などがまとまっていたように思います。パラパラ読んでみて面白そうだなーと思える人向け。

Haskellによる関数プログラミングの思考法

Image uploaded from iOS.jpg

まだ読めていませんー。

純粋関数型データ構造

Image uploaded from iOS.jpg

まだ読めていません・・・。

ここに出てくるデータ構造を知らなくても使うだけなら containers パッケージで十分です。内部実装を詳しく知りたい人はぜひ読みましょう!(僕も読みます)

7つの言語7つの世界

p.jpg

まつもとゆきひろ さんが監訳した言語マニアのための本です。

第8章に Haskell が載ってます。これで Haskell ができるようになるわけじゃないですが、雰囲気は伝わります。

また、Phillip Wadler さんと SPJ (Simon Peyton-Jones) さんのインタビューが載っているので、Haskell 大好き人間は購入しましょう。

The Haskell School of Expression

p.jpg

あまり知られていませんが、僕は結構好きです。内容自体は古くなっている部分が多いです。

ヴィジュアルメインで Haskell を学んでいく本です。練習問題も多く、最後まで読めばある程度の力がついていると思います。

前半で図形を実際に描画しながら Haskell を学び、後半では Reactive, Stream, Robot, Music などをテーマにして Haskell でこんなこともできるんだよ!っていうことを教えてくれます。また、本書で初めて lazy pattern についてある程度理解できたように思います。

グラフィカルな感じで楽しかった記憶があります。今から読むとコードが古すぎてつらい部分もあるので、その辺を修正しながら動かせる人向けです。(残念ながら今から入門するには適してない感じです)

Developing Web Apps With Haskell and Yesod

Image uploaded from iOS.jpg

Haskell のフルスタックWebフレームワーク Yesod の入門書です。内容が古くなっている箇所が多々あるため、今から勉強したい人は公式サイトの Book を読んだ方が良いです。

書籍だけでなく Yesod の使い方をある程度学びつつ、実際にコードリーディングするとより楽しめる内容かと思います。

Learning Haskell Data Analysis

p.jpg

まだ読んで無い・・・。

Algorithms

p.jpg

昔ちょっとだけ読んだけど、全く記憶に無いです・・・。書籍のコードは Haskell で記述されています。

魔力Haskell

p.jpg

題名が面白かったので買ってみました。中国語読めないしネタで買ってみたんですが、思ったよりちゃんとした内容で雰囲気的には Haskell 入門 に似ている本です。まだ全然読めていません。

アプリケーションを開発するための本ではなく、基礎的な話から MonadIO, bytestring, warp, persistent, esqueleto, TH, GADT, DataKinds, aeson, lens など比較的新しめの、良く見る話題について書いてあります。

日本人なら心の眼を使って雰囲気で読める感じです。

圏論の基礎

p.jpg

Haskell とは直接関係無いですが、一応言及しておきます。昔なんとなく買ってみました。(というかこれタイトル詐欺だよね)

間違っても Haskeller ならこのぐらい読めなくちゃね!みたいな感じで買うのはやめましょう。絶対に無理です。それにこれ読んでも普通の人は Haskell に活かせる気がしません。

原著のタイトル読めばわかりますが Working Mathematician 以外は、本書を手に取っても重たいだけです。

それでも圏論のことちょっとは知りたいよ!みたいな人は 圏論の歩き方 をオススメしておきます。

圏論の歩き方

この本は表紙がポップな感じなので、安心感がありますよね!

Amazon のレビューにありましたが、内容は 数学セミナー の連載をまとめたものらしいです。

これを読んで圏論が理解できるわけじゃないですけど、圏と関手とモナドの話がわかりやすく載ってるので、Haskell/Category theory ぐらいの理解を求めるのであれば、本書で良い気がします。

あとは分野が違うけど応用の話がいくつか載っており、全然わかりません。

圏論

Image uploaded from iOS.jpg

Twitter にてご指摘があったので紹介しておきます。

計算機科学の人は圏論の基礎よりも、こちらの方がわかりやすいという噂です。

僕は当然まだ読んでません。積んであります。

型システム入門

Image uploaded from iOS.jpg

通称: TaPL

(Haskell の) 型システムについて学習するために何か良い本ありませんか?と聞かれればたぶん全員がこの本をおすすめするんじゃないでしょうか。

24章の存在型まできました。(読み始めてから2年経過)

終わりに

読む本が無くなっても、論文が毎年量産されるので安心です。

また、正しい Haskell がわからなくなった時は Haskell 2010 Language Report を参照しましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away