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

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.8.1
1.5.1. Highlights
1.5.2. Full details
1.5.2.1. Language
1.5.2.2. Compiler
1.5.2.3. GHCi
1.5.2.4. Template Haskell
1.5.2.5. Runtime system
1.5.2.6. Build system
1.5.3. Libraries
1.5.3.1. array
1.5.3.2. base
1.5.3.3. bin-package-db
1.5.3.4. binary
1.5.3.5. bytestring
1.5.3.6. Cabal
1.5.3.7. containers
1.5.3.8. deepseq
1.5.3.9. directory
1.5.3.10. filepath
1.5.3.11. ghc-prim
1.5.3.12. haskell98
1.5.3.13. haskell2010
1.5.3.14. hoopl
1.5.3.15. hpc
1.5.3.16. integer-gmp
1.5.3.17. old-locale
1.5.3.18. old-time
1.5.3.19. process
1.5.3.20. template-haskell
1.5.3.21. time
1.5.3.22. unix
1.5.3.23. Win32
1.5.4. Known bugs
1.6. Release notes for version 7.8.2
1.6.1. GHC
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.4. 型、クラスおよびその他の宣言
2.4.5. プロンプトで実際にスコープにあるのは何か
2.4.5.1. スコープ内容に対する:loadの影響
2.4.5.2. importを使ったスコープ制御
2.4.5.3. :moduleコマンドを使ったスコープ制御
2.4.5.4. 修飾名
2.4.5.5. :module:load
2.4.6. :mainコマンドと:runコマンド
2.4.7. itという変数
2.4.8. GHCiにおける型のデフォルト化
2.4.9. デフォルト以外の対話表示関数を使う
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:setiコマンド
2.8.1. GHCiオプション
2.8.2. GHCiからGHCのコマンド行オプションを設定する
2.8.3. 対話的評価についてのみのオプションを設定する
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. GHCのバックエンド
4.11.1. ネイティブコード生成器(-fasm)
4.11.2. LLVMコード生成器(-fllvm)
4.11.3. Cコード生成器(-fvia-C)
4.11.4. 非レジスタ化コンパイル
4.12. 特定の段階に関するオプション
4.12.1. それぞれの段階で使われるプログラムを変更する
4.12.2. 特定の段階にオプションを強制する
4.12.3. Cプリプロセッサに影響するオプション
4.12.3.1. CPPと文字列間隙
4.12.4. Haskell前処理器に影響するオプション
4.12.5. コード生成に影響するオプション
4.12.6. リンクに影響するオプション
4.13. 共有ライブラリを使う
4.13.1. 共有ライブラリを使うようにプログラムをビルドする
4.13.2. Haskellパッケージの共有ライブラリ
4.13.3. CのAPIをエクスポートする共有ライブラリ
4.13.4. 実行時における共有ライブラリの発見
4.13.4.1. Unix
4.13.4.2. Mac OS X
4.14. Concurrent Haskellを使う
4.15. SMP並列計算を使う
4.15.1. SMP並列計算に関するコンパイル時オプション
4.15.2. SMP並列性のためのRTSオプション
4.15.3. SMP並列計算を使うにあたってのヒント
4.16. プラットフォーム固有のフラグ
4.17. コンパイル済みプログラムを実行する
4.17.1. RTSオプションを設定する
4.17.1.1. コマンド行でRTSオプションを設定する
4.17.1.2. コンパイル時にRTSオプションを設定する
4.17.1.3. RTSOPTSでRTSオプションを設定する
4.17.1.4. RTSの振る舞いを変更するためのフック
4.17.2. いろいろなRTSオプション
4.17.3. ガベッジコレクタを制御するためのRTSオプション
4.17.4. 並行性と並列性に関するRTSオプション
4.17.5. プロファイルに関するRTSオプション
4.17.6. 追跡情報を得る
4.17.7. ハックする者、デバッグする者、及び好奇心過剰な魂のためのRTSオプション
4.17.8. RTSに関する情報を取得する
4.18. 外部コアファイルを生成・コンパイルする
4.19. コンパイラをデバッグする
4.19.1. コンパイラの中間構造を出力する
4.19.2. 出力の整形
4.19.3. 不要な情報を抑制する
4.19.4. 整合性の検査
4.19.5. コア構文(-ddump系フラグ由来の)の読み方
4.20. フラグ早見表
4.20.1. 多弁さに関するオプション
4.20.2. 通常以外の実行モード
4.20.3. どの段階を実行するか
4.20.4. 出力先の変更
4.20.5. 中間ファイルの保持
4.20.6. 一時ファイル
4.20.7. インポートされたものを見つける
4.20.8. インタフェースファイルに関するオプション
4.20.9. 再コンパイル検査
4.20.10. 対話モードのオプション
4.20.11. パッケージ
4.20.12. 言語オプション
4.20.13. 警告
4.20.14. 最適化水準
4.20.15. 個々の最適化
4.20.16. プロファイルに関するオプション
4.20.17. プログラム網羅オプション
4.20.18. Haskell前処理器オプション
4.20.19. Cプリプロセッサオプション
4.20.20. コード生成オプション
4.20.21. プログラムのリンク
4.20.22. プラグインオプション
4.20.23. 段階の置き換え
4.20.24. 特定の段階にオプションを強制する
4.20.25. プラットフォーム固有のオプション
4.20.26. 外部コアファイルに関するオプション
4.20.27. コンパイラのデバッグに関するオプション
4.20.28. その他のコンパイルオプション
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.7. コード網羅率を観察する
5.7.1. 小さな例: 逆数をとる
5.7.2. 網羅率の測定器を付与するオプション
5.7.3. hpcツールキット
5.7.3.1. hpc report
5.7.3.2. hpc markup
5.7.3.3. hpc sum
5.7.3.4. hpc combine
5.7.3.5. hpc map
5.7.3.6. hpc overlayとhpc draft
5.7.4. Haskell Program Coverageの注意点と短所
5.8. 「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. ビューパターン
7.3.8. パターンシノニム
7.3.9. n+kパターン
7.3.10. 伝統的なレコード構文
7.3.11. 再帰的do記法
7.3.11.1. 再帰的束縛グループ
7.3.11.2. mdo記法
7.3.12. 並行リスト内包表記
7.3.13. 一般化(SQL風)リスト内包表記
7.3.14. Monad内包表記
7.3.15. 再束縛可能な構文とPreludeの暗黙インポート
7.3.16. 後置演算子
7.3.17. タプルのセクション
7.3.18. ラムダcase
7.3.19. 空のcase選択肢
7.3.20. 多選択肢のif式
7.3.21. レコードフィールドの曖昧性除去
7.3.22. レコード同名利用
7.3.23. レコードワイルドカード
7.3.24. 局所結合性宣言
7.3.25. パッケージ修飾されたインポート
7.3.26. safeインポート
7.3.27. インポート/エクスポートの際の名前空間の明示
7.3.28. 盗まれた構文の概略
7.4. データ型と型シノニムへの拡張
7.4.1. 構築子のないデータ型
7.4.2. データ型文脈
7.4.3. 中置型構築子、中置クラス、中置型変数
7.4.4. 型演算子
7.4.5. 型シノニムの制限緩和
7.4.6. 存在量化されたデータ構築子
7.4.6.1. どこが存在的か?
7.4.6.2. 存在型と型クラス
7.4.6.3. レコード構築子
7.4.6.4. 制約
7.4.7. 構築子のシグネチャを明示してデータ型を宣言する
7.4.8. 一般化代数データ型(GADT)
7.5. 「deriving」機構への拡張
7.5.1. deriving節について推論される文脈
7.5.2. 独立deriving宣言
7.5.3. より広範なクラスについてのderiving節(TypeableDataなど)
7.5.4. Typeableインスタンスを自動的に導出する
7.5.5. newtypeについての自動導出インスタンスの一般化
7.5.5.1. deriving節の一般化
7.5.5.2. より精密な規定
7.6. クラスおよびインスタンス宣言
7.6.1. クラス宣言
7.6.1.1. 多引数の型クラス
7.6.1.2. クラス宣言のスーパークラス
7.6.1.3. クラスメソッドの型
7.6.1.4. デフォルトメソッドシグネチャ
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.3.5. 重複インスタンス
7.6.3.6. インスタンス宣言中の型シグネチャ
7.6.4. 文字列リテラルの多重定義
7.6.5. リストの多重定義
7.6.5.1. IsListクラス
7.6.5.2. 構文の再束縛
7.6.5.3. デフォルト化
7.6.5.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.7.2.5. 型族の等式間の互換性と分離性
7.7.2.6. 型シノニムインスタンスの決定可能性
7.7.3. 関連データ族と関連型族
7.7.3.1. 関連インスタンス
7.7.3.2. 関連型シノニムのデフォルト
7.7.3.3. クラスパラメタのスコープ規則
7.7.3.4. インスタンス文脈と、関連型および関連データインスタンス
7.7.4. インポートとエクスポート
7.7.4.1. 例
7.7.4.2. インスタンス
7.7.5. 型族とインスタンス宣言
7.8. 種多相
7.8.1. 種多相の概観
7.8.2. 概観
7.8.3. 多相種再帰と完全な種シグネチャ
7.8.4. 閉型族における種推論
7.8.5. クラスインスタンス宣言における種推論
7.9. データ型の昇格
7.9.1. 動機
7.9.2. 概観
7.9.3. 型と構築子の区別
7.9.4. 昇格したリスト型とタプル型
7.9.5. 存在的なデータ構築子の昇格
7.9.6. 型演算子の昇格
7.10. 型水準リテラル
7.10.1. 型水準リテラルに対応する実行時の値
7.10.2. 型水準自然数を使った計算
7.11. 等式制約
7.11.1. Coercible制約
7.12. Constraintという種
7.13. 型システムへのその他の拡張
7.13.1. 明示的な全称量化(forall)
7.13.2. 型シグネチャの文脈
7.13.3. 曖昧な型、および曖昧性検査
7.13.4. 暗黙パラメタ
7.13.4.1. 暗黙パラメタ型制約
7.13.4.2. 暗黙パラメタの束縛
7.13.4.3. 暗黙パラメタと多相再帰
7.13.4.4. 暗黙パラメタと単相性
7.13.5. 明示的に種付けされた量化
7.13.6. 任意ランク多相
7.13.6.1. 例
7.13.6.2. 型推論
7.13.6.3. 暗黙の量化
7.13.7. 非叙述的多相
7.13.8. 字句的スコープを持つ型変数
7.13.8.1. 概観
7.13.8.2. 宣言型シグネチャ
7.13.8.3. 式型シグネチャ
7.13.8.4. パターン型シグネチャ
7.13.8.5. クラス宣言とインスタンス宣言
7.13.9. 束縛および一般化
7.13.9.1. 恐怖の単相性限定を無効にする
7.13.9.2. 相互再帰的な束縛に対する型付けの一般化
7.13.9.3. letにおける一般化
7.14. 型付き穴
7.15. 型エラーを実行時まで遅らせる
7.15.1. 型エラーの遅延を有効にする
7.15.2. GHCiで型エラーを遅らせる
7.16. Template Haskell
7.16.1. 構文
7.16.2. Template Haskellを使う
7.16.3. Template Haskellの実例
7.16.4. Template Haskellをプロファイルと併用する
7.16.5. Template Haskellの準クォート
7.17. アロー記法
7.17.1. コマンドのdo記法
7.17.2. 条件コマンド
7.17.3. 制御構造を自分で定義する
7.17.4. プリミティブな構成要素
7.17.5. 論文との差異
7.17.6. 可搬性
7.18. びっくりパターン
7.18.1. びっくりパターンについての非形式的な説明
7.18.2. 構文と意味論
7.19. アサーション
7.20. プラグマ
7.20.1. LANGUAGEプラグマ
7.20.2. OPTIONS_GHCプラグマ
7.20.3. INCLUDEプラグマ
7.20.4. WARNINGおよびDEPRECATEDプラグマ
7.20.5. MINIMALプラグマ
7.20.6. INLINEおよびNOINLINEプラグマ
7.20.6.1. INLINEプラグマ
7.20.6.2. INLINABLEプラグマ
7.20.6.3. NOINLINEプラグマ
7.20.6.4. CONLIKE修飾子
7.20.6.5. 段階制御
7.20.7. LINEプラグマ
7.20.8. RULESプラグマ
7.20.9. SPECIALIZEプラグマ
7.20.9.1. SPECIALIZE INLINE
7.20.9.2. インポートした関数のSPECIALIZE
7.20.9.3. 旧式のSPECIALIZE構文
7.20.10. SPECIALIZE instanceプラグマ
7.20.11. UNPACKプラグマ
7.20.12. NOUNPACKプラグマ
7.20.13. SOURCEプラグマ
7.21. 書き換え規則
7.21.1. 構文
7.21.2. 意味論
7.21.3. 書き換え規則と、INLINE/NOINLINEおよびCONLIKEプラグマとの間の相互作用
7.21.4. リストの融合変換
7.21.5. 特殊化
7.21.6. 書き換え規則の中で何が起こるか制御する
7.21.7. COREプラグマ
7.22. 特殊な組込み関数
7.23. 総称クラス
7.24. 総称プログラミング
7.24.1. 表現を導出する
7.24.2. 総称関数を書く
7.24.3. 総称的デフォルト
7.24.4. さらなる情報
7.25. 役割
7.25.1. 名目、表現、幽霊
7.25.2. 役割推論
7.25.3. 役割注釈
7.26. Concurrent HaskellおよびParallel Haskell
7.26.1. Concurrent Haskell
7.26.2. Software Transactional Memory
7.26.3. Parallel Haskell
7.26.4. 純粋なコードに並列計算用の注釈を加える
7.26.5. Data Parallel Haskell
7.27. Safe Haskell
7.27.1. Safe Haskellの用途
7.27.1.1. 厳格な型安全性(良いスタイル)
7.27.1.2. セキュアなシステムを構築する(制約付きIOモナド)
7.27.2. safe language
7.27.3. safeインポート
7.27.4. 信頼とSafe Haskellのモード
7.27.4.1. 信頼検査(-fpackage-trustが無効の場合)
7.27.4.2. 信頼検査(-fpackage-trustが有効の場合)
7.27.4.3. 例
7.27.4.4. Trustworthyの要件
7.27.4.5. パッケージへの信頼
7.27.5. Safe Haskellの推論
7.27.6. Safe Haskellのフラグまとめ
7.27.7. 安全なコンパイル
8. 外部関数インタフェース(FFI)
8.1. FFI追補に対するGHCの拡張
8.1.1. 非ボックス化型
8.1.2. IOモナドを包むnewtype
8.1.3. プリミティブのインポート
8.1.4. 割り込み可能な外部呼び出し
8.1.5. 呼び出し規約CAPI
8.1.6. hs_thread_done()
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. GHCを拡張する・ライブラリとして使う(GHC as a Library)
9.1. ソース注釈
9.1.1. 値に注釈を付ける
9.1.2. 型に注釈を付ける
9.1.3. モジュールに注釈を付ける
9.2. GHCをライブラリとして使う
9.3. コンパイラプラグイン
9.3.1. コンパイラプラグインを使う
9.3.2. コンパイラプラグインを書く
9.3.2.1. CoreToDoについてより詳しく
9.3.2.2. 束縛を操作する
9.3.2.3. 注釈を使う
10. An External Representation for the GHC Core Language (For GHC 6.10)
10.1. Introduction
10.2. External Grammar of Core
10.3. Informal Semantics
10.3.1. Program Organization and Modules
10.3.2. Namespaces
10.3.3. Types and Kinds
10.3.3.1. Types
10.3.3.2. Coercions
10.3.3.3. Kinds
10.3.3.4. Lifted and Unlifted Types
10.3.3.5. Type Constructors; Base Kinds and Higher Kinds
10.3.3.6. Type Synonyms and Type Equivalence
10.3.4. Algebraic data types
10.3.5. Newtypes
10.3.6. Expression Forms
10.3.7. Expression Evaluation
10.4. Primitive Module
10.4.1. Non-concurrent Back End
10.4.2. Literals
11. 何かがうまくいかないとき
11.1. コンパイラが「正しくないこと」をしたとき
11.2. あなたのプログラムが「正しくないこと」をしたとき
12. その他のHaskellユーティリティプログラム
12.1. “Haskell用Yacc”: happy
12.2. CコードへのHaskellインタフェースを書く: hsc2hs
12.2.1. コマンド行構文
12.2.2. 入力の構文
12.2.3. 自分で構文要素を用意する
12.2.4. クロスコンパイル
13. Win32システムでGHCを運用する
13.1. WindowsプラットフォームでGHCを起動する
13.2. WindowsでGHCiを実行する
13.3. 端末を使った対話
13.4. ライブラリの振る舞いにおける差異
13.5. GHC(および、GHCでコンパイルされた実行ファイル)をcygwinで使う
13.5.1. 背景
13.5.2. 問題
13.5.3. するべきこと
13.6. Win32のDLLをビルド・利用する
13.6.1. DLLを作成する
13.6.2. 他の言語から呼ぶためのDLLを作る
13.6.2.1. VBAから使う
13.6.2.2. C++から使う
14. 既知のバグと問題点
14.1. Haskell 標準とGlasgow Haskell、言語上の不準拠点
14.1.1. Haskell 98およびHaskell 2010からの逸脱
14.1.1.1. 字句的構文
14.1.1.2. 文脈自由文法
14.1.1.3. 式とパターン
14.1.1.4. 宣言と束縛
14.1.1.5. モジュールシステムとインタフェースファイル
14.1.1.6. 数値、基本型、組込みクラス
14.1.1.7. Preludeサポートに関すること
14.1.1.8. 外部関数インタフェース
14.1.2. Haskell 98とHaskell 2010の未定義動作についてのGHCの解釈
14.1.3. FFI仕様からの逸脱
14.2. 既知のバグと問題点
14.2.1. GHCのバグ
14.2.2. GHCi(対話的GHC)のバグ
索引

日本語訳について