栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン7.0.4

The GHC Team


目次

The Glasgow Haskell Compiler License
1. 参考訳
1. GHCの紹介
1.1. GHCを入手する
1.2. メタ情報: ウェブサイト、メーリングリストなど
1.3. GHCのバグを報告する
1.4. GHCのバージョン番号付け規則
1.5. Release notes for version 7.0.4
1.6. Release notes for version 7.0.3
1.7. Release notes for version 7.0.2
1.7.1. Compiler
1.7.2. GHCi
1.7.3. Runtime system
1.7.4. Build system
1.7.5. Haddock
1.7.6. Libraries
1.7.6.1. array
1.7.6.2. base
1.7.6.3. bin-package-db
1.7.6.4. bytestring
1.7.6.5. Cabal
1.7.6.6. containers
1.7.6.7. directory
1.7.6.8. extensible-exceptions
1.7.6.9. filepath
1.7.6.10. ghc-binary
1.7.6.11. ghc-prim
1.7.6.12. haskell98
1.7.6.13. haskell2010
1.7.6.14. hpc
1.7.6.15. integer-gmp
1.7.6.16. old-locale
1.7.6.17. old-time
1.7.6.18. pretty
1.7.6.19. process
1.7.6.20. random
1.7.6.21. template-haskell
1.7.6.22. time
1.7.6.23. unix
1.7.6.24. Win32
1.8. Release notes for version 7.0.1
1.8.1. Highlights
1.8.2. Language changes
1.8.3. Warnings
1.8.4. DLLs
1.8.5. Runtime system
1.8.6. Compiler
1.8.7. GHCi
1.8.8. Template Haskell and Quasi-Quoters
1.8.9. GHC API
1.8.10. Libraries
1.8.10.1. array
1.8.10.2. base
1.8.10.3. base 3 compat
1.8.10.4. bin-package-db
1.8.10.5. bytestring
1.8.10.6. Cabal
1.8.10.7. containers
1.8.10.8. directory
1.8.10.9. dph (dph-base, dph-par, dph-prim-interface, dph-prim-par, dph-prim-seq, dph-seq)
1.8.10.10. extensible-exceptions
1.8.10.11. filepath
1.8.10.12. ghc-binary
1.8.10.13. ghc-prim
1.8.10.14. haskell98
1.8.10.15. haskell2010
1.8.10.16. hpc
1.8.10.17. integer-gmp
1.8.10.18. old-locale
1.8.10.19. old-time
1.8.10.20. pretty
1.8.10.21. process
1.8.10.22. random
1.8.10.23. syb
1.8.10.24. template-haskell
1.8.10.25. time
1.8.10.26. unix
2. GHCiを使う
2.1. GHCiの紹介
2.2. ソースファイルをロードする
2.2.1. モジュールとファイル名
2.2.2. ソースコードの変更と再コンパイル
2.3. コンパイル済みコードをロードする
2.4. プロンプトで対話的に評価する
2.4.1. I/O動作とプロンプト
2.4.2. プロンプトでdo記法を使う
2.4.3. プロンプトで実際にスコープにあるのは何か
2.4.3.1. :module:load
2.4.3.2. 修飾名
2.4.3.3. :mainコマンドと:runコマンド
2.4.4. itという変数
2.4.5. GHCiにおける型のデフォルト化
2.5. GHCiデバッガ
2.5.1. ブレークポイントと変数内容の表示
2.5.1.1. ブレークポイントを設定する
2.5.1.2. ブレークポイントを一覧・削除する
2.5.2. ステップ実行
2.5.3. ブレークポイントのネスト
2.5.4. _resultという変数
2.5.5. 追跡と履歴
2.5.6. 例外をデバッグする
2.5.7. 例: 関数を調べる
2.5.8. 制約
2.6. GHCiを起動する
2.6.1. パッケージ
2.6.2. 追加のライブラリ
2.7. GHCiのコマンド群
2.8. :setコマンド
2.8.1. GHCiオプション
2.8.2. GHCiからGHCのコマンド行オプションを設定する
2.9. .ghciファイル
2.10. GHCi内でオブジェクトコードにコンパイルする
2.11. FAQと注意事項
3. runghcを使う
3.1. フラグ
4. GHCを使う
4.1. 始めてみよう: プログラムをコンパイルする
4.2. オプション概観
4.2.1. コマンド行引数
4.2.2. ソースファイル中のコマンド行オプション
4.2.3. GHCiからオプションを設定する
4.3. 静的オプション、動的オプション、モード指定オプション
4.4. 意味を持つファイル接尾辞
4.5. 実行モード
4.5.1. ghc ––makeを使う
4.5.2. 式評価モード
4.5.3. 一括処理コンパイラモード
4.5.3.1. ファイルに対するデフォルトの振る舞いを上書きする
4.6. ヘルプと多弁さに関するオプション
4.7. ファイル名と分割コンパイル
4.7.1. Haskellソースファイル
4.7.2. 出力ファイル
4.7.3. 探索パス
4.7.4. コンパイルの出力先を変える
4.7.5. 中間ファイルをそのままにする
4.7.6. 一時ファイルの場所を変更する
4.7.7. インタフェースファイルに関連するその他のオプション
4.7.8. 再コンパイル検査器
4.7.9. 相互再帰的なモジュールをコンパイルするには
4.7.10. makeを使う
4.7.11. 依存関係を生成する
4.7.12. 孤立モジュールと孤立インスタンス宣言
4.8. 警告と正気度チェックのためのオプション
4.9. パッケージ
4.9.1. パッケージを使う
4.9.2. mainパッケージ
4.9.3. パッケージを使うことのHaskell言語への影響
4.9.4. パッケージデータベース
4.9.4.1. GHC_PACKAGE_PATH環境変数
4.9.5. パッケージID、依存関係、壊れたパッケージ
4.9.6. パッケージ管理(ghc-pkgコマンド)
4.9.7. Haskellソースからパッケージをビルドする
4.9.8. InstalledPackageInfo: パッケージの仕様
4.10. 最適化(コードの改善)
4.10.1. -O*: 便利な最適化フラグの「詰め合わせ」。
4.10.2. -f*: プラットフォーム非依存のフラグ
4.11. 特定の段階に関するオプション
4.11.1. それぞれの段階で使われるプログラムを変更する
4.11.2. 特定の段階にオプションを強制する
4.11.3. Cプリプロセッサに影響するオプション
4.11.3.1. CPPと文字列間隙
4.11.4. Haskell前処理器に影響するオプション
4.11.5. コード生成に影響するオプション
4.11.6. リンクに影響するオプション
4.12. 共有ライブラリを使う
4.12.1. 共有ライブラリを使うようにプログラムをビルドする
4.12.2. Haskellパッケージの共有ライブラリ
4.12.3. CのAPIをエクスポートする共有ライブラリ
4.12.4. 実行時における共有ライブラリの発見
4.12.4.1. Unix
4.12.4.2. Mac OS X
4.13. Concurrent Haskellを使う
4.14. SMP並列計算を使う
4.14.1. SMP並列計算に関するコンパイル時オプション
4.14.2. SMP並列性のためのRTSオプション
4.14.3. SMP並列計算を使うにあたってのヒント
4.15. プラットフォーム固有のフラグ
4.16. コンパイル済みプログラムを実行する
4.16.1. RTSオプションを設定する
4.16.1.1. コマンド行でRTSオプションを設定する
4.16.1.2. コンパイル時にRTSオプションを設定する
4.16.1.3. RTSOPTSでRTSオプションを設定する
4.16.1.4. RTSの振る舞いを変更するためのフック
4.16.2. いろいろなRTSオプション
4.16.3. ガベッジコレクタを制御するためのRTSオプション
4.16.4. 並行性と並列性に関するRTSオプション
4.16.5. プロファイルに関するRTSオプション
4.16.6. 追跡情報を得る
4.16.7. ハックする者、デバッグする者、及び好奇心過剰な魂のためのRTSオプション
4.16.8. RTSに関する情報を取得する
4.17. 外部コアファイルを生成・コンパイルする
4.18. コンパイラをデバッグする
4.18.1. コンパイラの中間構造を出力する
4.18.2. 整合性の検査
4.18.3. コア構文(-ddump系フラグ由来の)の読み方
4.18.4. 非レジスタ化コンパイル
4.19. フラグ早見表
4.19.1. ヘルプと多弁さに関するオプション
4.19.2. どの段階を実行するか
4.19.3. 通常以外の実行モード
4.19.4. 出力先の変更
4.19.5. 中間ファイルの保持
4.19.6. 一時ファイル
4.19.7. インポートされたものを見つける
4.19.8. インタフェースファイルに関するオプション
4.19.9. 再コンパイル検査
4.19.10. 対話モードのオプション
4.19.11. パッケージ
4.19.12. 言語オプション
4.19.13. 警告
4.19.14. 最適化水準
4.19.15. 個々の最適化
4.19.16. プロファイルに関するオプション
4.19.17. プログラム網羅オプション
4.19.18. Haskell前処理器オプション
4.19.19. Cプリプロセッサオプション
4.19.20. コード生成オプション
4.19.21. プログラムのリンク
4.19.22. 段階の置き換え
4.19.23. 特定の段階にオプションを強制する
4.19.24. プラットフォーム固有のオプション
4.19.25. 外部コアファイルに関するオプション
4.19.26. コンパイラのデバッグに関するオプション
4.19.27. その他のコンパイルオプション
5. プロファイルを取る
5.1. コスト集約点とコスト集約点スタック
5.1.1. コスト集約点を手動で挿入する
5.1.2. コストの配分規則
5.2. プロファイルについてのコンパイルオプション
5.3. 時間及び確保量のプロファイルを取る
5.4. メモリ使用状況のプロファイルを取る
5.4.1. ヒーププロファイルのためのRTSオプション
5.4.2. 維持原因プロファイル
5.4.2.1. 維持原因プロファイルに関するヒント
5.4.3. 経歴プロファイル
5.4.4. 実際のメモリ使用量
5.5. hp2ps––ヒーププロファイルをPostScriptへ
5.5.1. hpファイルを操作する
5.5.2. プロファイルの特定の部分に注目する
5.5.3. 実行中のプログラムのヒーププロファイルを見る
5.5.4. ヒーププロファイルを実時間で閲覧する
5.6. コード網羅率を観察する
5.6.1. 小さな例: 逆数をとる
5.6.2. 網羅率の測定器を付与するオプション
5.6.3. hpcツールキット
5.6.3.1. hpc report
5.6.3.2. hpc markup
5.6.3.3. hpc sum
5.6.3.4. hpc combine
5.6.3.5. hpc map
5.6.3.6. hpc overlayとhpc draft
5.6.4. Haskell Program Coverageの注意点と短所
5.7. 「ticky-ticky」プロファイルを使う
6. より早く、より高速で、より小さく、より慎ましくあるための助言
6.1. より早く: プログラムを素早く生成する
6.2. より速く: 高速に動作するプログラムを作る
6.3. より小さく: 小さいプログラムを作る
6.4. より慎ましく: 少ないヒープで動作するプログラムを作る
7. GHCの言語機能
7.1. 言語オプション
7.2. 非ボックス化型とプリミティブ演算
7.2.1. 非ボックス化型
7.2.2. 非ボックス化タプル
7.3. 構文的拡張
7.3.1. Unicode構文
7.3.2. 魔法の井桁(magic hash)
7.3.3. 演算子を修飾する際の新しい構文
7.3.4. 階層的モジュール
7.3.5. パターンガード
7.3.6. ビューパターン
7.3.7. n+kパターン
7.3.8. 再帰的do記法
7.3.8.1. 再帰的do記法についての詳細
7.3.8.2. mdo記法 (廃止予定)
7.3.9. 並行リスト内包表記
7.3.10. 一般化(SQL風)リスト内包表記
7.3.11. 再束縛可能な構文とPreludeの暗黙インポート
7.3.12. 後置演算子
7.3.13. タプルのセクション
7.3.14. レコードフィールドの曖昧性除去
7.3.15. レコード同名利用
7.3.16. レコードワイルドカード
7.3.17. 局所結合性宣言
7.3.18. パッケージ修飾されたインポート
7.3.19. 盗まれた構文の概略
7.4. データ型と型シノニムへの拡張
7.4.1. 構築子のないデータ型
7.4.2. データ型文脈
7.4.3. 中置型構築子、中置クラス、中置型変数
7.4.4. 型シノニムの制限緩和
7.4.5. 存在量化されたデータ構築子
7.4.5.1. どこが存在的か?
7.4.5.2. 存在型と型クラス
7.4.5.3. レコード構築子
7.4.5.4. 制約
7.4.6. 構築子のシグネチャを明示してデータ型を宣言する
7.4.7. 一般化代数データ型(GADT)
7.5. 「deriving」機構への拡張
7.5.1. deriving節について推論される文脈
7.5.2. 独立deriving宣言
7.5.3. より広範なクラスについてのderiving節(TypeableDataなど)
7.5.4. newtypeについての自動導出インスタンスの一般化
7.5.4.1. deriving節の一般化
7.5.4.2. より精密な規定
7.6. クラスおよびインスタンス宣言
7.6.1. クラス宣言
7.6.1.1. 多引数の型クラス
7.6.1.2. クラス宣言のスーパークラス
7.6.1.3. クラスメソッドの型
7.6.2. 関数従属
7.6.2.1. 関数従属に関する諸規則
7.6.2.2. 関数従属の背景
7.6.3. インスタンス宣言
7.6.3.1. インスタンス頭部に関する規則の緩和
7.6.3.2. インスタンス文脈に関する規則の緩和
7.6.3.3. 決定不能インスタンス
7.6.3.4. 重複インスタンス
7.6.4. 文字列リテラルの多重定義
7.7. 型の族
7.7.1. データ族
7.7.1.1. データ族宣言
7.7.1.2. データインスタンス宣言
7.7.1.3. インポートとエクスポート
7.7.2. シノニム族
7.7.2.1. 型族宣言
7.7.2.2. 型インスタンス宣言
7.7.2.3. 同値性制約
7.7.2.4. 型族とインスタンス宣言
7.8. 型システムへのその他の拡張
7.8.1. 明示的な全称量化(forall)
7.8.2. 型シグネチャの文脈
7.8.3. 暗黙パラメタ
7.8.3.1. 暗黙パラメタ型制約
7.8.3.2. 暗黙パラメタの束縛
7.8.3.3. 暗黙パラメタと多相再帰
7.8.3.4. 暗黙パラメタと単相性
7.8.4. 明示的に類付けされた量化
7.8.5. 任意ランク多相
7.8.5.1. 例
7.8.5.2. 型推論
7.8.5.3. 暗黙の量化
7.8.6. 非叙述的多相
7.8.7. 字句的スコープを持つ型変数
7.8.7.1. 概観
7.8.7.2. 宣言型シグネチャ
7.8.7.3. 式型シグネチャ
7.8.7.4. パターン型シグネチャ
7.8.7.5. クラス宣言とインスタンス宣言
7.8.8. 相互再帰的な束縛に対する型付けの一般化
7.8.9. 単相的な局所束縛
7.9. Template Haskell
7.9.1. 構文
7.9.2. Template Haskellを使う
7.9.3. Template Haskellの実例
7.9.4. Template Haskellをプロファイルと併用する
7.9.5. Template Haskellの準クォート
7.10. アロー記法
7.10.1. コマンドのdo記法
7.10.2. 条件コマンド
7.10.3. 制御構造を自分で定義する
7.10.4. プリミティブな構成要素
7.10.5. 論文との差異
7.10.6. 可搬性
7.11. びっくりパターン
7.11.1. びっくりパターンについての非形式的な説明
7.11.2. 構文と意味論
7.12. アサーション
7.13. プラグマ
7.13.1. LANGUAGEプラグマ
7.13.2. OPTIONS_GHCプラグマ
7.13.3. INCLUDEプラグマ
7.13.4. WARNINGおよびDEPRECATEDプラグマ
7.13.5. INLINEおよびNOINLINEプラグマ
7.13.5.1. INLINEプラグマ
7.13.5.2. INLINABLEプラグマ
7.13.5.3. NOINLINEプラグマ
7.13.5.4. CONLIKE修飾子
7.13.5.5. 段階管理
7.13.6. ANNプラグマ
7.13.6.1. 値に注釈を付ける
7.13.6.2. 型に注釈を付ける
7.13.6.3. モジュールに注釈を付ける
7.13.7. LINEプラグマ
7.13.8. RULESプラグマ
7.13.9. SPECIALIZEプラグマ
7.13.9.1. SPECIALIZE INLINE
7.13.9.2. インポートした関数のSPECIALIZE
7.13.9.3. 旧式のSPECIALIZE構文
7.13.10. SPECIALIZE instanceプラグマ
7.13.11. UNPACKプラグマ
7.13.12. SOURCEプラグマ
7.14. 書き換え規則
7.14.1. 構文
7.14.2. 意味論
7.14.3. 書き換え規則と、INLINE/NOINLINEおよびCONLIKEプラグマとの間の相互作用
7.14.4. リストの融合変換
7.14.5. 特殊化
7.14.6. 書き換え規則の中で何が起こるか制御する
7.14.7. COREプラグマ
7.15. 特殊な組込み関数
7.16. 総称クラス
7.16.1. 総称性を使う
7.16.2. 論文からの変更点
7.16.3. 用語と制約
7.16.4. もう一つの例
7.17. 単相性の制御
7.17.1. 恐怖の単相性限定を無効にする
7.17.2. 単相的パターン束縛
7.18. Concurrent HaskellおよびParallel Haskell
7.18.1. Concurrent Haskell
7.18.2. Software Transactional Memory
7.18.3. Parallel Haskell
7.18.4. 純粋なコードに並列計算用の注釈を加える
7.18.5. Data Parallel Haskell
8. 他言語関数インタフェース(FFI)
8.1. FFI追補に対するGHCの拡張
8.1.1. 非ボックス化型
8.1.2. IOモナドを包むnewtype
8.1.3. プリミティブのインポート
8.2. GHCでFFIを使う
8.2.1. GHCでforeign exportforeign import ccall "wrapper"を使う
8.2.1.1. 自分で用意したmain()を使う
8.2.1.2. 他言語のコードから呼べるようなHaskellライブラリを作る
8.2.2. ヘッダファイルを使う
8.2.3. メモリ確保
8.2.4. マルチスレッドとFFI
8.2.4.1. foreign importとマルチスレッド
8.2.4.2. HaskellスレッドとOSスレッドの関係
8.2.4.3. foreign exportとマルチスレッド
8.2.4.4. hs_exit()の使用について
8.2.5. 浮動小数点とFFI
9. 何かがうまくいかないとき
9.1. コンパイラが「正しくないこと」をしたとき
9.2. あなたのプログラムが「正しくないこと」をしたとき
10. その他のHaskellユーティリティプログラム
10.1. “Haskell用Yacc”: happy
10.2. CコードへのHaskellインタフェースを書く: hsc2hs
10.2.1. コマンド行構文
10.2.2. 入力の構文
10.2.3. 自分で構文要素を用意する
11. Win32システムでGHCを運用する
11.1. WindowsプラットフォームでGHCを起動する
11.2. WindowsでGHCiを実行する
11.3. 端末を使った対話
11.4. ライブラリの振る舞いにおける差異
11.5. GHC(および、GHCでコンパイルされた実行ファイル)をcygwinで使う
11.5.1. 背景
11.5.2. 問題
11.5.3. するべきこと
11.6. Win32のDLLをビルド・利用する
11.6.1. DLLを作成する
11.6.2. 他の言語から呼ぶためのDLLを作る
11.6.2.1. VBAから使う
11.6.2.2. C++から使う
12. 既知のバグと問題点
12.1. Haskell 98とGlasgow Haskell、言語上の不準拠点
12.1.1. Haskell 98からの逸脱
12.1.1.1. 字句的構文
12.1.1.2. 文脈自由文法
12.1.1.3. 式とパターン
12.1.1.4. 宣言と束縛
12.1.1.5. モジュールシステムとインタフェースファイル
12.1.1.6. 数値、基本型、組込みクラス
12.1.1.7. Preludeサポートに関すること
12.1.2. Haskell 98の未定義動作についてのGHCの解釈
12.1.3. FFI仕様からの逸脱
12.2. 既知のバグと問題点
12.2.1. GHCのバグ
12.2.2. GHCi(対話的GHC)のバグ
索引

日本語訳について