Haskell
Haskell :: Functional Programming with Types
編集Haskellは関数型言語であり、他のプログラミング言語を触ったことのある読者なら、Haskellのやり方は他の言語とは多少異なっていることが分かるでしょう。
Haskellの独自性は二つあります。一つは、「純粋」関数型言語であることです。純粋関数型言語では、同じ関数を同じ引数で呼び出した場合、必ず同じ戻り値になることが保証されます。二つ目は、Haskellが極めて現代的な型理論を備えていることです。Haskellでは、型クラスや代数的データ型などの型を扱うことができます。これらの難解な概念は、今は全く理解できないかもしれませんが、この本を読み終えた後には、より身近なものに感じられるでしょう。
さて、Haskellerたちはこの言語のどこに魅力を感じているのでしょうか。ユニークで新しい感覚を得られるからでしょうか。しかし、Haskellの最も優れた性質は、純粋関数のみによって書かれていることで、プログラムを容易に理解でき、プログラムの正しさを簡単に示せることです。さらに、優れた型システムは、誤ったプログラムの修正にも役立ちます。単純なミスだけでなく、根の深い、厄介な問題の解決にも役立つのです。
この本では、Haskellおよびプログラミング一般に関するトピックを扱います。熟練プログラマの読者は、最初の間は少し辛抱して読み進めていただきたいです。Haskellは、読者が慣れ親しんできたであろう他の言語のほとんどと全く異なっており、他の言語での積み上げてきた習慣がかえって理解の妨げになるかもしれません。Haskellの仕組みは単純ですが、他の言語とは異なっているのです。他の言語でのプログラミング経験のある読者は、以前とは全く異なる世界、複雑な対象への巧みなプログラミングと、関数型プログラマの数学的思考法の世界を探検するつもりでいてほしい。
はじめに
編集この本は3つの部分、初級教程、上級教程、実用プログラミングのセクションからできている。実用プログラミングの項目では、実際の場面で使うプログラミングの方法について解説する。これは初級教程だけの知識で読むことができる。
初級教程
編集このセクションでは、Haskellの最も基本的な部分と、頻繁に利用するライブラリを紹介する。この教程によって、単純なプログラムを書くことができるようになる。ほとんどの章には演習問題があり、新しく学んだ知識について練習することができる。解答つき。
Haskellの基本編集 |
Haskell - 初級編集 |
Haskell - 中級編集
|
モナド編集 |
上級教程
編集このセクションでは、関数型プログラミング言語Haskellの扱う様々な理論的概念を紹介する。型理論、データ構造の解説に加えて、プログラムの並行性といった実用的な議論もここで行う。
Haskell - 上級編集
|
型のいろいろ編集
|
より広い理論編集
|
Haskellの高速化編集
|
Haskellで実用プログラミング
編集このセクションでは、より実際の問題をプログラミングする場面で必要になる、標準ライブラリの使い方やGUIの作り方、データベースへの接続といった内容を解説する。
Libraries Reference編集 |
General Practices編集 |
Specialised Tasks編集 |
Appendices
編集Alternate tutorials
編集- Haskell Meta-tutorial - the tutorial to find other tutorials
- 48時間でSchemeを書こう - (imported) An alternate approach to teaching Haskell (and perhaps Scheme), aimed at a more advanced audience (though not necessarily one that knows how to program!)
- Yet Another Haskell Tutorial - (imported) is aimed at beginners and takes a practical approach to things. It is now part of this wikibook and will eventually be mixed in to the main text.
Additional resources
編集- haskell.org - Resources for learning Haskell.
- The resource page for Haskell: the craft of functional programming