書籍概要

Haskell入門 関数型プログラミング言語の基礎と実践

著者
発売日
更新日

概要

基礎文法から実践的なアプリケーション開発までしっかりわかるHaskellの入門書です。型,関数,モナド,並列並行などHaskellの重要な考え方と実際にアプリケーション開発を行うまでをわかりやすく解説しています。

こんな方におすすめ

  • Haskellに入門したい人
  • Haskellの基礎を学んで実践的なアプリケーション開発をしてみたい人
  • 関数型プログラミングの技法を身に付けたい人

サンプル

目次

第1章 はじめてのHaskell

  • 1.1 Haskell の特徴
  • 1.2 実行環境の構築
  • 1.3 REPL とスクリプトの実行
  • 1.4 プロジェクト作成とビルド

第2章 基本の文法

  • 2.1 文法の特色
  • 2.2 基本のデータ型
  • 2.3 変数
  • 2.4 関数
  • 2.5 main 関数とdo 式
  • 2.6 条件分岐とパターンマッチ
  • 2.7 データ構造
  • 2.8 ループの実現
  • 2.9 モジュールとパッケージ

第3章 型・型クラス

  • 3.1 型の記述
  • 3.2 型システム
  • 3.3 型コンストラクタと型変数
  • 3.4 代数的データ型
  • 3.5 レコード記法
  • 3.6 再帰的な定義
  • 3.7 型の別名
  • 3.8 型クラス
  • 3.9 型制約
  • 3.10 Preludeにおける型クラス

第4章 I/O処理

  • 4.1 IO 型
  • 4.2 コマンドライン引数と環境変数
  • 4.3 入出力
  • 4.4 ファイルシステム
  • 4.5 例外処理

第5章 モナド

  • 5.1 モナドアクション
  • 5.2 Monad の性質を利用する
  • 5.3 Functor とApplicative
  • 5.4 Either eモナドとExcept e モナド
  • 5.5 Reader r モナド
  • 5.6 ST s モナド
  • 5.7 リストモナド
  • 5.8 モナド変換子

第6章 関数型プログラミング

  • 6.1 型とプログラミング
  • 6.2 関数による抽象化
  • 6.3 代入文と変数の局所性
  • 6.4 型クラスと拡張性

第7章 ライブラリ

  • 7.1 標準ライブラリ
  • 7.2 GHCに付属するライブラリ
  • 7.3 効率的な文字列操作 ─ ByteString・Text
  • 7.4 高速にランダムアクセス可能な配列 ─ vector
  • 7.5 高速なパーサ ─ attoparsec
  • 7.6 型安全なJOSN 操作 ─ aeson
  • 7.7 日付・時刻を扱う ─ time
  • 7.8 複雑なデータ構造への効率的なアクセス ─ lens
  • 7.9 モナドによるDSL の実現 ─ operational
  • 7.10 ストリームデータ処理 ─ pipes

第8章 並列・並行プログラミング

  • 8.1 並列と並行
  • 8.2 MVarによるスレッド間の通信
  • 8.3 STM によるスレッド間の通信
  • 8.4 非同期例外
  • 8.5 より安全な非同期 ─ async
  • 8.6 並列性を実現するライブラリ

第9章 コマンドラインツールの作成

  • 9.1 開発の準備
  • 9.2 HUnit による自動テスト
  • 9.3 パーサの作成
  • 9.4 クエリの実行とIO 処理
  • 9.5 まとめ

第10章 Webアプリケーションの作成

  • 10.1 Web アプリケーション環境の選定
  • 10.2 開発の準備
  • 10.3 モデルの開発
  • 10.4 コントローラの開発
  • 10.5 ビューの開発
  • 10.6 実行ファイルの作成
  • 10.7 まとめ

第11章 サーバとクライアントの連携

  • 11.1 開発の準備
  • 11.2 クライアント・サーバシステムの簡易実装
  • 11.3 オークションシステムの構築
  • 11.4 オークションシステムのクライアントプログラム
  • 11.5 まとめ

サポート

ダウンロード

サンプルファイルのダウンロード

本書のサンプルファイルをご利用いただけます。
サンプルファイルの利用方法についてはzipファイル内のREADME.mdを参照してください。
https://github.com/hiratara/Haskell-Nyumon-Sampleからgitでも取得できます。

ダウンロード
サンプルファイル

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2017年9月26日最終更新)

目次,P.256

型安全なJOSN操作 - aeson
型安全なJSON操作 - aeson

P.44「ポイントフリースタイルによる可読性の悪化」

\x y -> (x + 2) * (y + 3)
\x y -> (2 + x) * (3 + y)

P.60リスト


Prelude> case x of (x1, x2) -> print x2


Prelude> case x of (x1, x2) -> x2

P.73リスト


module Main(main) where import Params


module Main(main) where
import Params

P.161最下部のリスト

正しくは黒背景です。

P.169リスト


game :: [Card] -> [(Score, Hand, Player)]


game :: Stock -> [(Score, Hand, Player)

P.245のリスト

import Control.Monadは必要ありません。

P.245最下部のリスト

次の修正に加えて,背景色は黒色です。


fromList ["Dog", "Pig", "Cat", "Wolf", "Mouse", "Cow", "Horse"]


["Dog", "Pig", "Cat", "Wolf", "Mouse", "Cow", "Horse"]

P.260リスト


nameListValue :: Value



{# LANGUAGE OverloadedLists}
nameListValue :: Value


P.271「Prism」によるデータアクセス内のリスト


他の関数も使うのでControl.Lens.Prismまでしてしない


他の関数も使うのでControl.Lens.Prismまで指定しない

P.301リスト


getUrl :: Request -> IO L8.ByteString


getUrl :: Request -> IO C8.ByteString

商品一覧